Canvas 画正n角星
Canvas 画正n角星
看到canvas画图是不由得想起之前的gostscript,两者很类似,借鉴crystalhuhu 的五角星画法
先讲如何画一个正规的五角星
在五角星的内外画两个圆,五角星有五个角,360/5=72度
所以得出这两个角的度数
然后算出这两个点坐标
角度转弧度
角度/180*Math.PI
所以外顶点坐标x: Math.cos( (18+72*i)/180*Math.PI) * R
y: Math.sin((18+72*i)/180*Math.PI) * R
所以内顶点坐标 x: Math.cos( (54+72*i)/180*Math.PI) * r
y: Math.sin((54+72*i)/180*Math.PI) * r
画完五角星后我就想何不画个n角星,说画就画:
推倒下N角星的顶点坐标:
三角星 外圆内圆中对应的顶点坐标相差120度 外圆起始角30° 内圆起始角60° 30+60 = 360/3=120
四角星 外圆内圆中对应的顶点坐标相差90度 外圆起始角22.5° 内圆起始角67.5° 30+60 = 360/4=90
五角星 外圆内圆中对应的顶点坐标相差72度 外圆起始角18° 内圆起始角54° 18+54= 360/5 =72
六角星 外圆内圆中对应的顶点坐标相差60度 外圆起始角15° 内圆起始角45° 15+45= 360/6 =60
所以外定点坐标x: Math.cos(((360/n)*(1/4)+(360/n)*1)/180*Math.PI)*R
y: Math.sin(((360/n)*(1/4)+(360/n)*1)/180*Math.PI)*R
所以内定点坐标x: Math.cos(((360/n)*(3/4)+(360/n)*1)/180*Math.PI)*R
y: Math.sin(((360/n)*(3/4)+(360/n)*1)/180*Math.PI)*R
简化后就是:
外定点坐标x: Math.cos(((360/n)*(1/4)+(360/n)*1)/180*Math.PI)*R
y: Math.sin(((360/n)*(1/4)+(360/n)*1)/180*Math.PI)*R
内定点坐标x: Math.cos(((360/n)*(3/4)+(360/n)*1)/180*Math.PI)*R
y: Math.sin(((360/n)*(3/4)+(360/n)*1)/180*Math.PI)*R
那么整段代码如下(当n>=3的时候正确):
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title></title><link rel="stylesheet" href="">
</head>
<body><canvas id="mycanvas"></canvas><script>var canvas = document.getElementById('mycanvas');canvas.width=800;//设置画布的宽度 canvas.height=800;//设置画布的高度var cxt = canvas.getContext('2d');createStar(cxt,4,100,300,400,400,10);function createStar(context,n,r,R,x,y,lwid) {/*content 画图对象n 星型顶点数r 内圆半径R 外圆半径x 星型中心点x坐标y 星型中心店y坐标lwid lineWidth*/cxt.save();cxt.lineWidth=lwid;cxt.beginPath();cxt.translate(x,y);for(var i=0;i<n;i++){cxt.lineTo(Math.cos(((1/4 + i)*2*Math.PI/n))*R,-Math.sin(((1/4 + i)*2*Math.PI/n))*R);cxt.lineTo(Math.cos(((3/4 + i)*2*Math.PI/n))*r,-Math.sin(((3/4 + i)*2*Math.PI/n))*r);} cxt.closePath(); cxt.stroke();cxt.restore();} </script>
</body>
</html>
Canvas 画正n角星相关推荐
- WPF画N角芒星,正N角星
计算顶部三角形坐标方法: 1 /// <summary> 2 /// 获取顶三角形坐标 3 /// </summary> 4 /// <param name=" ...
- Python之OpenGL笔记(34):采用了顶点常量属性方法画多彩六角星
一.目的 1.采用了顶点常量属性方法画多彩六角星: 二.程序运行结果 三.顶点常量属性 吴亚峰<OpenGL ES 3.x游戏开发>(上卷)内容 前面的很多案例中,给每一个顶点 ...
- openGL画一个正5角星
既然安装好了环境就免不得要用一下吧!所以写了以下的这个demo! 在linux下使用也很简单.直接创建一个.c的文档,把以下的代码复制进去.然后打开终端 进入该文档的目录 在终端输入 gcc -lg ...
- canvas 画正圆
宽高要在canvas标签上通过width 和height属性定义,通过style定义就会出椭圆 <canvas ref='countDown' width="134" hei ...
- android 自定义View六芒星(六角星)
public class Xing2View extends CustomView {public Xing2View(Context context) {super(context);}@Overr ...
- 教你用canvas画n角星星
首先我们要明白星星的结构,星星有很多种,五角星是最常用的一种星星,后面还有三角星六角星等等,但是只要是星星都是高度对称的,所以只要是星星结构的东西我们就能按照一定规则将其画出. 我们看一下一个n角星的 ...
- 画正圆角矩形 - HTML5 Canvas 作图
function DrawRoundRect(Canvas,P1,P2,Radius) 功能:画正圆角矩形 参数:P1:矩形左上角坐标:P2:矩形右下角坐标: Radius:圆角大小 源代码: fun ...
- python画八角星_Goc-N角星的绘制
从五角星说起 谈到N角星,习惯性的我们会先想到五角星.你可能觉得应该这样绘制: 代码也会相当的简洁: 六角星和八角星 我们能用同样的方法画六角星吗?NO!五角星可以一笔画出来,笔画不重复,而六角星不行 ...
- python六角星_在Python中使用龟画出不同边长的六角星。
希望我能解释得很好.我目前使用helper函数在python的turtle graphics窗口中绘制一个六角星.首先,我们必须创建一个绘制三角形的函数.这是我的代码:在Python中使用龟画出不同边 ...
最新文章
- android工程r红,Android Studio - 为什么R随机变为红色?
- 【MCtalk活动推荐】娱乐社交APP的AI探索、架构与性能优化实践
- 如何打开设计思路,避免不断改稿?只需提前做好这一步
- Java线程池newSingleThreadExecutor newFixedThreadPool newCachedThreadPool newScheduledThreadPool
- 换个姿势为安装包重签名
- SAP API开发方法大全
- java api csdn_java api函数读出当前机器名以及版本号 csdn
- OpenCV中的「透视变换 / 投影变换 / 单应性」—cv.warpPerspective、cv.findHomography
- Oracle常用导出导出命令及性能效率对比
- Unity3D脚本语言的类型系统
- 用axure绘制PHP工作流程图,如何用Axure绘制高质量的业务流程图?
- 校园网络视频监控系统方案
- 根据ASCII码值排序
- 支付宝芝麻信用免押金领取POS机、信用免押租赁系统开发
- 自然语言处理技术的进展和趋势
- 几个简单规则改进你的SEO效果
- linux桌面文件夹改名,Ubuntu 无法重命名文件问题的解决
- 通过百度站长死链提交需要注意哪些事项?
- java基础实战练习_JAVA入门第三季第七章实战练习
- 十四届全国大学生“恩智浦”杯智能汽车竞赛信标组总结(4)
热门文章
- 综合设计一个OPPE主页--页面服务部分
- 亲爱的,与宝宝争宠要趁早
- Eclipse4.7.2 Nodeclipse1.0.2 CodeMix3
- 普罗米修斯 监控 postgresql
- 运行时间监控:如何确保网络设备运行时间
- corrosion 靶机(ffuf模糊测试,命令执行)
- 黑马程序员,黑马论坛----Java+云计算3期,就业率98.57%,平均薪水6613元!
- append方法例子
- 解决 YOLOV5中SyntaxError: Non-ASCII character ‘\xf0‘ in file detect.py
- Android拨打电话的两种实现方法