-
如何画一个正多边形
2016-12-13 10:46:15场景给定一个指定的正方形的区域,要求在该区域内画一个正N边形(正三角形、正方形、正五边形……) public static void drawPolygon (RectF rect, Canvas canvas, Paint p, int n) { // draw…… }分析要用到本文由BarryZhang原创,同时首发于barryzhang.com,简书,非商业转载请注明作者和原文链接。
场景
给定一个指定的正方形的区域,要求在该区域内画一个正N边形(正三角形、正方形、正五边形……)
public static void drawPolygon (RectF rect, Canvas canvas, Paint p, int n) { // draw…… }
分析
要用到一些三角函数的知识,于是我画了一幅灵魂画作��:
分析:- 计算出每个顶点的坐标,然后把它们连起来,就是一个正多边形啦~
- 圆心角a的度数为
360/n
,弧度计算为2π/n
。 - 如果把圆心的坐标为(0,0),那么顶点P1的坐标为
[X1=cos(a),Y1=sin(a)]
。 - 以此类推,顶点Pn坐标为
[Xn=cos(a*n),Yn=sin(a*n)]
。 - 圆心的实际坐标是外接矩形的中心:
[Ox=(rect.right+rect.left)/2 , Oy=(rect.top+rect.bottom)/2]
。 - 所以Pn的实际坐标是
[Xn+Ox,Yn+Oy]
。 - 把P0-P1…Pn连起来就是我们要的结果了。
- Java中可以使用
Path
来保存路径,最后使用canvas.drawPath
来绘制出来。
实现
简化的伪代码:
float a = 2π / n ; // 角度 Path path = new Path(); for( int i = 0; i <= n; i++ ){ float x = R * cos(a * i); float y = R * sin(a * i); if (i = 0){ path.moveTo(x,y); // 移动到第一个顶点 }else{ path.lineTo(x,y); // } } drawPath(path);
Java代码最终的完整代码,可以直接拿去用:
public static void drawPolygon (RectF rect, Canvas canvas, Paint paintByLevel, int number) { if(number < 3) { return; } float r = (rect.right - rect.left) / 2; float mX = (rect.right + rect.left) / 2; float my = (rect.top + rect.bottom) / 2; Path path = new Path(); for (int i = 0; i <= number; i++) { // - 0.5 : Turn 90 ° counterclockwise float alpha = Double.valueOf(((2f / number) * i - 0.5) * Math.PI).floatValue(); float nextX = mX + Double.valueOf(r * Math.cos(alpha)).floatValue(); float nextY = my + Double.valueOf(r * Math.sin(alpha)).floatValue(); if (i == 0) { path.moveTo(nextX, nextY); } else { path.lineTo(nextX, nextY); } } canvas.drawPath(path, paintByLevel); }
DEMO
这个项目里用到了这个函数,可以点进去看以及下载demo。
https://github.com/barryhappy/TContributionsView -
正多边形是如何画出来的?
2019-11-01 15:50:48前言:以基础尺柜作图可以作出何种正多边形? 一,尺规作图的简介 尺规作图有多种功能 : 1.作相等的线段,角 可在∠AOC上画一个圆 于是OA=OC 然后 再在线段O‘上取相等半径OA画圆 再截取AC的长 在A‘处作圆 交圆...前言:以基础尺柜作图可以作出何种正多边形?
一,尺规作图的简介
尺规作图有多种功能 :1.作相等的线段,角
可在∠AOC上画一个圆 于是OA=OC 然后 再在线段O‘上取相等半径OA画圆
再截取AC的长 在A‘处作圆 交圆O’于C’ 则△AOC ≌△A’O"C’ 这就作出了相等的角2.加减乘除法的运算
加法:加法较为简单
两个线段长度相加即可
减法同理
乘法:
有一段线段OA 随便作一个角 然后在角上取单位线段1的长度
然后再在OC上取CD=b 作AC的平行线BD 交OA于点B
由相似三角形可知 OA/OC = AB/CD
则a*b = AB除法同理 令AB =b 则 CD = a/b
3. 平方根的运算
在OA上取OB为单位线段1
以AB为直径作圆 再作OC⊥AB 交圆于点C
则由射影定理(欧几里得定理)得 OC² = OA*OB
则OC = √OA由此可见 基础尺规作图能表示加减乘除及开平方的数字
二 ,正多边形的计算方法
要作出正n边形 只要知道每一边的长度AB 其他边长都相同 也就是求出cosθ的大小
将圆心O看作复平面的中心 则ABCDE每一点的坐标分别为
A:cos0
B:cosθ -
python输入边数绘制正多边形_如何用Python,画一个正多边形,长度和颜色还是任意的!...
2020-12-28 19:42:46Python画基本形状,要用到自带的turtle库,这是个简单绘图的入门小工具。任务设定如上,下面来一点点拆解它。从键盘获取用户输入的边数。画笔形状由原来的三角形,改为海龟形状。长度随机产生,从100到200,最小变化...Python画基本形状,要用到自带的turtle库,这是个简单绘图的入门小工具。
任务设定如上,下面来一点点拆解它。
从键盘获取用户输入的边数。
画笔形状由原来的三角形,改为海龟形状。
长度随机产生,从100到200,最小变化为20。
颜色采用0到255表示,r(红)g(绿)b(蓝)三色组成,代表着总共有16,777,216这么多种颜色,随机生成。
把填充开始和结束这两个语句,放在画图形前后。
既然是形状,最少的边数为三,内角度为60;正方形为90;更多的边用到公式来计算180*(n-2)/n(n为边数),结果即为正n边形的内角度数。
导入两个库,一个画图(行2),一个是随机数(行3);改变颜色模式(行9),改变画笔颜色(行14);有几个边,循环几次(行29),每一次根据内角度向右拐(行30),前进随机长度(边长,行31);画完之后,一定要写上完成语句(行37),要不在JupyterNotebook中会卡的很。
正三角形。
正方(四边)形。
正五边形。
正六边形。
正七边形。
正八边形。
正九边形。每次的颜色和边长,都是不同的。
结尾
当边数趋近于无穷大时,就是圆。
-
利用turtle画多个连续的正多边形
2019-11-12 10:53:21具体要求:从等边三角形开始,至13边行为止,连贯的画出上述图形,中间不可以有停顿。 思考 很明显这一题是利用turtle进行解答。 经过思考,我们可以将画图的过程分成转角和前进。前进不难,关键是如何转角。...利用python绘制如下图像
具体要求:从等边三角形开始,至13边行为止,连贯的画出上述图形,中间不可以有停顿。
思考
很明显这一题是利用turtle进行解答。
经过思考,我们可以将画图的过程分成“转角”和“前进”。“前进”不难,关键是如何“转角”。“转角”部分可以分成“一个等边图形内”和“等边图形之间的转化”两部分。”等边图形内“的转角很简单,就是360/i。“等边图形之间的转化”的转角则需要以相反的方向转换本次多边形的外角。
#!/usr/bin/env python #-*- coding:utf-8 -*- import turtle t = turtle.Pen() t.forward(50) for i in range(3,14): angle = 360/i for j in range(i - 1): if i % 2 == 1: t.left(angle) else: t.right(angle) t.forward(50) if i % 2 == 0: t.left(180 - 360/i) else: t.right(180 - 360/i)
-
cv2 画多边形不填充_AI如何画一个Tiger
2020-12-29 23:29:31第一步:新建一个400*300的画布,使用椭圆工具(L)的同时按下shift键,画一个68*68的正圆,填充颜色为:#f3ad24;如下图所示:第二步:耳朵;使用椭圆工具(L)的同时按下shift键,画一个24*24的正圆,填充颜色为:#f3... -
画一个圆角多边形_用AI如何画一个Tiger
2021-01-11 19:22:10第一步:新建一个400*300的画布,使用椭圆工具(L)的同时按下shift键,画一个68*68的正圆,填充颜色为:#f3ad24;如下图所示:第二步:耳朵;使用椭圆工具(L)的同时按下shift键,画一个24*24的正圆,填充颜色为:#f3... -
纯CSS实现单一div的正多边形变换
2020-12-13 21:41:52最后再搭配动画的效果,变成正多边形的变换动画,也由于正多边形需要用到不少的三角函数计算,为了方便起见,这里将正多边形的边统一都设为100px。 正三角形 正三角形不需要用到伪元素,只需要设定div本身的边框宽度... -
单一div的正多边形变换(纯CSS)
2019-04-28 05:45:18上一篇我们介绍了如何利用before和after伪元素来做Material Design风格的...最后再搭配动画的效果,变成正多边形的变换动画,也由于正多边形需要用到不少的三角函数计算,为了方便起见,这里将正多边形的边统一都... -
如何利用python画三棱锥_玩转CSS 3D -正四面体与正六面体
2020-12-12 12:29:02我们理解了CSS 3D的个中原理之后,废话就不用多说,直接来画正多面体吧!只要正多面体可以画出来,基本上在CSS 3D的领域里,大概就没甚么难得倒我们了。首先看一下百度百科对于正多面体的介绍:“多面体,或称柏拉图... -
圆内接等边三角形的画法_如何画出圆的内接正三角形
2020-12-21 05:26:092019-10-09阅读(66)利用直尺精确绘画利用量角器绘画六边形(Hexagonal):多边形的一种,指所有有六条边和六个角的多边形。自然界中,苯与石墨的分子结构、龟壳、蜂巢等都呈现正六边形形状。内角120度,外角60度,内角... -
如何用python画五星红旗_如何用python画出五星红旗
2020-12-20 13:43:18# coding=utf-8import turtleimport mathdef draw_polygon(aTurtle, size=50, n=3):''' 绘制正多边形args:aTurtle: turtle对象实例size: int类型,正多边形的边长n: int类型,是几边形'''for i in range(n):aTurtle.... -
日积一步6(在二维平面上如何判断一组点是否在多边形的内部)
2019-08-28 00:06:01原理:从该点向任意一方画射线,数该射线与多边形的边的交点数量,如果为奇数则在多边形内部,如果为偶数则在多边形的外部。 程序计算步骤: 1. 找出多边形的最大与最小X和Y的值。 2. 如果点的X坐标或Y坐标大于... -
利用Canvas绘制雷达图
2017-10-27 21:32:25如何画正多边形以正五边形雷达图为例(其他任意正多边形也一样),如下图所示。Canvas画图的原点在左上角,以r为半径,(r, r)为圆心作圆,作为正五边形的外接圆,则正五边形每条边所对应的圆心角均为 rad = 2*Math.... -
Scratch-(五)满天星-画笔绘制五角星
2020-08-14 00:07:00Scratch-(五)满天星-画笔绘制五角星 上两篇内容都讲述了画笔的功能,今天来完成画笔如何绘制各种图形的方法,完成一个满天星 ...正多边形各内角度数为: (n - 2)×180°÷n 例如三角形内角和就是一个三角 -
使用Konva操纵HTML5画布:第4部分,样式
2020-06-18 05:04:10在本系列的第二篇教程中,您学习了如何使用Konva绘制一些基本形状,例如矩形,圆形和正多边形。 第三个教程介绍了如何使用Konva在画布上绘制一些更复杂的形状,例如星形和环形以及精灵。 在本教程中,我们将... -
圆弧怎么用msdn画_scratch3数学之美03-圆和圆弧
2020-12-08 10:01:16大家好,我是爱编程的小熊,上一节我们学会了如何绘制自制积木,这节...编程思路:运用前几节的内容学到的绘制正多边形画圆,大家有没有发现,正多边形的边数越多,越像圆。而圆弧就是一个不完整的圆。开始编程:1.... -
如何利用魔棒工具抠图_PS基础篇之十大抠图工具(下)
2020-12-08 22:52:02PS基础篇之十大抠图工具(上),主要讲解了矩形选框工具、椭圆选框工具(按shift,可画正圆选区)、多边形套索工具、磁性套索工具、魔棒工具的抠图要点及选区抠图的基础知识,这里我们不在展开,若有不懂,可自行... -
QT—class2 时间事件触发和绘图事件【第三次学习】
2020-05-23 22:56:39画正多边形的稍微难理解一些,是运用了数学上的在正多边形在一个围绕着他的圆中以圆心建一个规则的坐标系,推导而来的。 绘制圆弧,也可以画圆,这里的参数(外接长方形的起始坐标x,y,宽,开始的角度, -
Computer.Graphics.Using.OpenGL.(3rd_Edition)
2015-03-30 09:48:443.4 正多边形、圆和圆弧 3.4.1 正多边形 3.4.2 正n边形的变种 3.4.3 绘制圆弧和圆 3.4.4 曲线的逐次细化 3.5 曲线的参数形式 3.5.1 曲线的参数形式 3.5.2 绘制参数曲线 3.5.3 极坐标形状 本章小结 案例分析 进一步... -
教大家做2.5D等距画风
2018-08-18 16:37:16大家的第一眼可能感觉有点复杂,不知道该怎么画,其实这些都是由最基本的形状组合起来的,老夫今天就来指导大家如何修炼这套功法。 首先,我们先要了解这套功法(整个画面的视角): 可以看出这个立方体是由正菱形... -
arcgis工具
2012-10-22 22:37:3115. 如何用面生成中线 先把数据转成coverage格式,workstion里有Centerline命令。 另外ArcToolBox->Data Management Tools->Generalization->Collapse Dual Lines To Centerline也行。不过以上做法要求边界是双线... -
Nehe的OpenGL教程电子书
2018-04-07 12:25:03画中画效果,很酷吧。使用视口它变得很简单,但渲染四次可会大大降低你的显示速度哦:) 43.在OpenGL中使用FreeType库 使用FreeType库可以创建非常好看的反走样的字体,记住暴雪公司就是使用这个库的,就是那个... -
NeHe_OpenGL教程(完整版) 里面有源码下载地址(可以迅雷下载 亲测)
2010-10-18 00:24:30画中画效果,很酷吧。使用视口它变得很简单,但渲染四次可会大大降低你的显示速度哦:) 43.在OpenGL中使用FreeType库 使用FreeType库可以创建非常好看的反走样的字体,记住暴雪公司就是使用这个库的,就是那个做... -
计算机图形学(OpenGL)第三版(带完整目录).pdf
2017-02-15 10:03:093.4 正多边形、圆和圆弧 3.4.1 正多边形 3.4.2 正n边形的变种 3.4.3 绘制圆弧和圆 3.4.4 曲线的逐次细化 3.5 曲线的参数形式 3.5.1 曲线的参数形式 3.5.2 绘制参数曲线 3.5.3 极坐标形状 本章小结 案例分析 进一步... -
精通Android游戏开发(将本地PC游戏轻松移植到Android的秘技)--详细书签版
2013-02-08 11:30:55尽管Java是Android的主要开发语言,但Google意识到,作为一个游戏平台,Android要想取得成功,非常需要混合Java/C开发,正因如此,他们发布了NDK。Google逐渐认识到,为其他移动平台(如iPhone)编写的本地游戏非常... -
C++MFC教程
2013-05-21 13:37:15|------ 2.6 多边形和剪贴区域 +-- 第三章 文档视结构 |------ 3.1 文档 视图 框架窗口间的关系和消息传送规律 |------ 3.2 接收用户输入 |------ 3.3 使用菜单 |------ 3.4 文档,视,框架之间相互作用 |------ 3.5... -
中文版AutoCAD 2007基础与上机实训.rar
2020-04-11 10:45:30明确了点、直线、圆、圆弧、椭圆、矩形、正多边形等的绘制和线的特性(绘图前在 “对象特征”工具栏中确定线型、宽度、颜色等及线宽的设置)。 三、标注。尺寸标注的构成有4部分(尺寸线、箭头、尺寸界线、标注文字...