Canvas画空心正五角星-扩展DEMO为五星红旗
马上就要国庆了,在这个举国欢庆的日子里面,让我来画一个五角星表表我的爱国之情,啊?那你不是要画一个五星红旗?是的,你猜对了,其实我的最初想法只是画一个空心的正五角星,为了满足你,我拼一拼。在这个过程中却发现了一些问题,数学你原来这么美,我在少年时期就爱上了你,只是在后来我累了,把你抛弃了,值得庆幸的是,我现在又回来了,而你还是给了我一次机会。(现实其实太美,我不敢看,以上情节纯属虚构,切勿模仿,珍惜眼前人)
②:javascript
③:math(数学-图形与角度)
扩展demo1:星级评级 (代购真假指数:★☆☆☆☆)
扩展demo2:五星红旗
知识点1:什么是正五角星?
知识讲解:http://baike.baidu.com/view/424466.htm
知识点2:什么是弧度?
知识讲解:http://baike.baidu.com/view/84885.htm
“尼玛,这就讲完啦?自己看啊!”,“学习就是这样子的,你们只是缴了基础知识点的学费,没有缴详解的费用,需要详解请缴纳增值学费。”,“这太黑暗了,不就是老公不是首富了吗?太瞧不起人了,老子要去找马云!”。
代码中涉及到的一些变量仅仅是方便我的后期使用,各位使用时可以忽略。

画的有些丑,但是还是可以看出是从一个点直接隔一个点到下一个点。等我上传一个勉强可以看的图。
路线图:A-C-E-B-D-A
<canvas id="star" width="650" height="150">您的浏览器不支持canvas!</canvas>
<script>
(function() { //draw star
var starEle = document.getElementById("star"),
starNum = 5, //数量
padding_top = 25, //上边距
padding_left = 25, //左边距
space = 25, //间距
radius = 50, //半径
lineWidth = 2.0, //边宽
lineColor = "#FFF", //边颜色
drawStar = function() {
var i,
moveToX = radius + Math.cos(Math.PI / 10) * radius + padding_left,
moveToY = radius - Math.sin(Math.PI / 10) * radius + padding_top,
centerSpace = space + 2 * radius;
for(i = 0; i<starNum; i++) {
ctx.beginPath();
ctx.moveTo(moveToX, moveToY);
ctx.lineTo(radius + Math.cos(Math.PI * 9 / 10) * radius + padding_left + centerSpace * i, radius - Math.sin(Math.PI * 9 / 10) * radius + padding_top);
ctx.lineTo(radius + Math.cos(Math.PI * 17 / 10) * radius + padding_left + centerSpace * i, radius - Math.sin(Math.PI * 17 / 10) * radius + padding_top);
ctx.lineTo(radius + Math.cos(Math.PI * 5 / 10) * radius + padding_left + centerSpace * i, radius - Math.sin(Math.PI * 5 / 10) * radius + padding_top);
ctx.lineTo(radius + Math.cos(Math.PI * 13 / 10) * radius + padding_left + centerSpace * i, radius - Math.sin(Math.PI * 13 / 10) * radius + padding_top);
ctx.closePath();
ctx.lineWidth = lineWidth;
ctx.strokeStyle = lineColor;
ctx.stroke();
moveToX = moveToX + centerSpace;//下一个起点
}
},if(starEle.getContext) {
var ctx = starEle.getContext('2d');
drawStar();
}
}())
</script>
上述代码画出来的示意图是:
五角星现在已经画出来了,但是如何画出空心的五角星出来呢?
思路就是:从A出发沿着外边缘,“一步两步一步两步 一步一步似爪牙 似魔鬼的步伐 摩擦 摩擦 我给自己打着节拍 ”
<canvas id="star" width="650" height="150">您的浏览器不支持canvas!</canvas>
<script>
(function() { //draw star
var starEle = document.getElementById("star"),
starNum = 5, //数量
padding_top = 25, //上边距
padding_left = 25, //左边距
space = 25, //间距
bigRadius = 50, //半径
lineWidth = 2.0, //边宽
lineColor = "#FFF", //边颜色
width = starEle.width,
height = starEle.height,
moveToX = bigRadius + Math.cos(Math.PI / 10) * bigRadius + padding_left,
moveToY = bigRadius - Math.sin(Math.PI / 10) * bigRadius + padding_top,
drawStar = function() {
var i,
j,
radius,
smallRadius = bigRadius * Math.sin(Math.PI / 10) / Math.cos(Math.PI / 5),
centerSpace = space + 2 * bigRadius;
for(i = 0; i < starNum; i++) {
ctx.beginPath();
ctx.moveTo(moveToX, moveToY);
for(j = 1; j < 10; j++) {
radius = j % 2 == 0 ? bigRadius : smallRadius;
ctx.lineTo(bigRadius + Math.cos(Math.PI * (1 + 2 * j) / 10) * radius + padding_left + centerSpace * i, bigRadius - Math.sin(Math.PI * (1 + 2 * j) / 10) * radius + padding_top);
}
ctx.closePath();
ctx.lineWidth = lineWidth;
ctx.strokeStyle = lineColor;
ctx.stroke();
moveToX = moveToX + centerSpace;//下一个起点
}
};
if(starEle.getContext) {
var ctx = starEle.getContext('2d');
drawStar();
//待续
starEle.addEventListener("mousemove", function(e) {
console.log("未完待续");
}, false)
}
}())
</script>
上述代码画出来的示意图是:

谢谢@volkia @颜海镜 给予的意见,试着修复了一下角度

面对国旗是庄严的,国旗比例尺寸参考的是(http://baike.baidu.com/view/9304.htm),最后再次面对国旗唱完国歌祝各位国庆节快乐,此时,我觉得我胸前的红领巾越发的红了。
本文原创博客地址:http://www.cnblogs.com/unofficial 官网地址:
www.pushself.com
Canvas画空心正五角星-扩展DEMO为五星红旗的更多相关文章
- canvas画箭头demo
效果图: 代码: <!DOCTYPE html> <html> <title>canvas画箭头demo</title> <body> &l ...
- canvas 画圈 demo
html代码: <canvas id="clickCanvas2" width="180" height="180" data-to ...
- 深夜,用canvas画一个时钟
深夜,用canvas画一个时钟 查看demo 这几天准备阿里巴巴的笔试,可以说已经是心力交瘁,自从阿里和蘑菇街的内推被刷掉之后,开始越来越怀疑起自己的能力来,虽然这点打击应该是微不足道的.毕竟校招在刚 ...
- 使用canvas画三角形
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【Canvas】动态正17边光阑 向高斯致敬
[背景知识] 公元前三世纪,欧几里得在<几何原本>中记载了正方形,正五边形,正六边形的做法,后来人们也掌握了正十五边形作图,但之后两千多年,人们没有在更高阶边形上取得突破. 1796年,1 ...
- 10分钟,利用canvas画一个小的loading界面
首先利用定义下canvas得样式 <canvas width="1024" height="720" id="canvas" styl ...
- Android利用canvas画各种图形
Android利用canvas画各种图形(点.直线.弧.圆.椭圆.文字.矩形.多边形.曲线.圆角矩形) 本文链接:https://blog.csdn.net/rhljiayou/article/det ...
- Canvas 画圆
原文地址:http://hi.baidu.com/lj2tj/item/557d8d1a65adfa721009b58b --------------------------------------- ...
- 使用javascript和canvas画月半弯
使用javascript和canvas画月半弯,月半弯好浪漫!浏览器须支持html5 查看效果:http://keleyi.com/a/bjad/8xqdm0r2.htm 以下是代码: <!do ...
随机推荐
- python04 列表 元祖 字典
1.list 有序,元素可以被修改 li=[1,2,2,"am","123"] 列表中的元素可以是数字,字符串,列表等等 支持切片,切片结果为列表 li[3] ...
- mysql查询数据
select column,column from table where clause [limit n] [offset]; 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用W ...
- DB2 键约束操作
DB2 键约束操作 今天遇到一个问题,想要删掉一个表中的某列的唯一约束,google了一下,搜出来许许多多,找到能用的,记下来总结如下. 命令如下 select constname, tabname, ...
- PowerShell 命令行调试指引(转)
How to manage a debugging session Before you start debugging, you must set one or more breakpoints. ...
- 可遇不可求的Question之导入mysql中文乱码解决方法篇
可遇不可求的Question之导入mysql中文乱码解决方法篇 先 set names utf8;然后 source c:\1.sql ?
- .NET Core微服务之路:文章系列和内容索引汇总 (v0.52)
微服务架构,对于从事JAVA架构的童鞋来说,早已不是什么新鲜的事儿,他们有鼎鼎大名的Spring Cloud这样的全家桶框架支撑,包含微服务核心组件如 1. Eureka:实现服务注册与发现. 2. ...
- 详解Android数据存储技术
前言 学习Android相关知识,数据存储是其中的重点之一,如果不了解数据,那么让你跟一款没有数据的应用玩,你能玩多久呢?答案是这和没有手机几乎是差不多的.我们聊QQ,聊微信,看新闻,刷朋友圈等都是看 ...
- 【Spark调优】:如果实在要shuffle,使用map侧预聚合的算子
因业务上的需要,无可避免的一些运算一定要使用shuffle操作,无法用map类的算子来替代,那么尽量使用可以map侧预聚合的算子. map侧预聚合,是指在每个节点本地对相同的key进行一次聚合操作,类 ...
- 鱼眼投影方式(Fisheye projection)的软件实现
简单实现 鱼眼模式(Fisheye)和普通的透视投影(Perspective projection),一个很大的区别就是鱼眼的投影算法是非线性的(non-linear),实际照相机的情况是在镜头外面包 ...
- 源码调试debug_info 的作用和使用方法
在他通过gcc来编译程序时,在map文件中,经常会遇到如下的情况: .debug_info 0x002191b6 0x1aa9 XXX .debug_info 0x0021ac5f 0xce4 XXX ...