马上就要国庆了,在这个举国欢庆的日子里面,让我来画一个五角星表表我的爱国之情,啊?那你不是要画一个五星红旗?是的,你猜对了,其实我的最初想法只是画一个空心的正五角星,为了满足你,我拼一拼。在这个过程中却发现了一些问题,数学你原来这么美,我在少年时期就爱上了你,只是在后来我累了,把你抛弃了,值得庆幸的是,我现在又回来了,而你还是给了我一次机会。(现实其实太美,我不敢看,以上情节纯属虚构,切勿模仿,珍惜眼前人)

本文内容申明
内容针对canvas方面做一个星级评级方面的demo前期,仅表述个人观点与君交流,内容不全面的方面,请查阅参考资料。点击此处鼓励一下unofficial
涉及知识
①:html5(canvas)
②:javascript
③:math(数学-图形与角度)
demo描述与扩展
demo:空心五角星
扩展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为五星红旗的更多相关文章

  1. canvas画箭头demo

    效果图: 代码: <!DOCTYPE html> <html> <title>canvas画箭头demo</title> <body> &l ...

  2. canvas 画圈 demo

    html代码: <canvas id="clickCanvas2"  width="180" height="180" data-to ...

  3. 深夜,用canvas画一个时钟

    深夜,用canvas画一个时钟 查看demo 这几天准备阿里巴巴的笔试,可以说已经是心力交瘁,自从阿里和蘑菇街的内推被刷掉之后,开始越来越怀疑起自己的能力来,虽然这点打击应该是微不足道的.毕竟校招在刚 ...

  4. 使用canvas画三角形

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 【Canvas】动态正17边光阑 向高斯致敬

    [背景知识] 公元前三世纪,欧几里得在<几何原本>中记载了正方形,正五边形,正六边形的做法,后来人们也掌握了正十五边形作图,但之后两千多年,人们没有在更高阶边形上取得突破. 1796年,1 ...

  6. 10分钟,利用canvas画一个小的loading界面

    首先利用定义下canvas得样式 <canvas width="1024" height="720" id="canvas" styl ...

  7. Android利用canvas画各种图形

    Android利用canvas画各种图形(点.直线.弧.圆.椭圆.文字.矩形.多边形.曲线.圆角矩形) 本文链接:https://blog.csdn.net/rhljiayou/article/det ...

  8. Canvas 画圆

    原文地址:http://hi.baidu.com/lj2tj/item/557d8d1a65adfa721009b58b --------------------------------------- ...

  9. 使用javascript和canvas画月半弯

    使用javascript和canvas画月半弯,月半弯好浪漫!浏览器须支持html5 查看效果:http://keleyi.com/a/bjad/8xqdm0r2.htm 以下是代码: <!do ...

随机推荐

  1. python04 列表 元祖 字典

    1.list 有序,元素可以被修改 li=[1,2,2,"am","123"] 列表中的元素可以是数字,字符串,列表等等 支持切片,切片结果为列表  li[3] ...

  2. mysql查询数据

    select column,column from table where clause [limit n] [offset]; 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用W ...

  3. DB2 键约束操作

    DB2 键约束操作 今天遇到一个问题,想要删掉一个表中的某列的唯一约束,google了一下,搜出来许许多多,找到能用的,记下来总结如下. 命令如下 select constname, tabname, ...

  4. PowerShell 命令行调试指引(转)

    How to manage a debugging session Before you start debugging, you must set one or more breakpoints. ...

  5. 可遇不可求的Question之导入mysql中文乱码解决方法篇

    可遇不可求的Question之导入mysql中文乱码解决方法篇 先 set names utf8;然后 source c:\1.sql ?

  6. .NET Core微服务之路:文章系列和内容索引汇总 (v0.52)

    微服务架构,对于从事JAVA架构的童鞋来说,早已不是什么新鲜的事儿,他们有鼎鼎大名的Spring Cloud这样的全家桶框架支撑,包含微服务核心组件如 1. Eureka:实现服务注册与发现. 2. ...

  7. 详解Android数据存储技术

    前言 学习Android相关知识,数据存储是其中的重点之一,如果不了解数据,那么让你跟一款没有数据的应用玩,你能玩多久呢?答案是这和没有手机几乎是差不多的.我们聊QQ,聊微信,看新闻,刷朋友圈等都是看 ...

  8. 【Spark调优】:如果实在要shuffle,使用map侧预聚合的算子

    因业务上的需要,无可避免的一些运算一定要使用shuffle操作,无法用map类的算子来替代,那么尽量使用可以map侧预聚合的算子. map侧预聚合,是指在每个节点本地对相同的key进行一次聚合操作,类 ...

  9. 鱼眼投影方式(Fisheye projection)的软件实现

    简单实现 鱼眼模式(Fisheye)和普通的透视投影(Perspective projection),一个很大的区别就是鱼眼的投影算法是非线性的(non-linear),实际照相机的情况是在镜头外面包 ...

  10. 源码调试debug_info 的作用和使用方法

    在他通过gcc来编译程序时,在map文件中,经常会遇到如下的情况: .debug_info 0x002191b6 0x1aa9 XXX .debug_info 0x0021ac5f 0xce4 XXX ...