• 前言
  • 几何模型
  • 绘制
  • 拓展
  • 封装

前言

学习 canvas,更多的是需要动手实践,下面就从一个相对简单的例子:五角星开始吧!

不懂 canvas 的同学,请先学习:Canvas 画布

几何模型

由上图可以清晰的得到大概的思路,大圆和小圆上的点相间相连,就可以的到五角星。

我的做法是从右下角开始画。因为 canvas 的坐标系的第一象限,实际上是右下角,而不是右上角。这样,就可以避免纠结于 sin()cos() 的正负关系。

绘制

var canvas = document.getElementById('canvas');
var cxt = canvas.getContext('2d');var w = canvas.width;
var h = canvas.height;
var r1 = w / 2;
var r2 = r1 / 2;
var x1,x2,y1,y2;cxt.translate(r1, r1);
cxt.beginPath();
for (var i = 0; i < 5; i++) {x1 = r1 * Math.cos((54 + i*72)/180*Math.PI);y1 = r1 * Math.sin((54 + i*72)/180*Math.PI);x2 = r2 * Math.cos((18 + i*72)/180*Math.PI);y2 = r2 * Math.sin((18 + i*72)/180*Math.PI);cxt.lineTo(x2, y2);cxt.lineTo(x1, y1);
}
cxt.closePath();cxt.stroke();
  • 获取绘图上下文环境
  • 获取 canvas 的宽高,并由此定义两个圆的半径
  • 将原点重置到 (r, r) 圆心位置
  • 使用 lineTo() 绘制路径

注意
1. 因为右下角第一个点是小圆上的,所以循环中先画小圆上的点。
2. 在 beginPath() 方法后,可以直接使用 lineTo() 代替 moveTo()
3. 注意闭合路径使得最后一个点与开始的点连成线。

拓展

这样的五角星太单一,如果想获取其他的五角星形状,该如何处理。

观察下,大圆的半径是由 canvas 的宽高决定的,而小圆的半径则是可以改变的。这里的代码中 r1 = r2 / 2

试着改变这个比例:

r1 = r2 / 2.5

r1 = r2 / 3

你还可以继续调整得到了不一样的五角星!

封装

为了复用,可以将其封装成两个函数:

/****************************** cxt 为绘图上下文环境* r 为大圆半径* x,y 为相对 canvas 原点的坐标位置 * rot 为顺时针旋转角度****************************/
function draw_start(cxt, r, x, y, rot) {cxt.save();cxt.translate(x, y);cxt.rotate(rot/180*Math.PI);cxt.scale(r, r);startPath(cxt);cxt.stroke();cxt.restore();
}
//五角星标准路径
function startPath(cxt) {cxt.beginPath();for (var i = 0; i < 5; i++) {var x1 = Math.cos((54 + i*72)/180*Math.PI);var y1 = Math.sin((54 + i*72)/180*Math.PI);var x2 = Math.cos((18 + i*72)/180*Math.PI) * 0.5;var y2 = Math.sin((18 + i*72)/180*Math.PI) * 0.5;cxt.lineTo(x2, y2);cxt.lineTo(x1, y1);}cxt.closePath();
}

Canvas 画五角星相关推荐

  1. html5 canvas画五角星(美国队长)

    画一波五角星: 美国队长图标 原理:  (1)根据五角星的顶点,外顶点5个,内顶点5个,分成内外圆 (2)由三角函数可表示出每个顶点的位置 (3)利用canvas的lineTo()接口画图 上代码: ...

  2. html5绘制随机五角星_脑残无极限,用HTML5 CANVAS画五角星!

    (效果图) 当我开始研究HTML5的时候,canvas在第一时间就吸引住我了.哇塞,这东西未来绝对能取代WINDOWS的画图(小畫家)工具的! 于是本着探索的精神,我重新捡回了中学时期的三角函数,准备 ...

  3. html5绘制随机五角星_html5 canvas画五角星(随机生成)

    五角星的格定点坐标该如何定位?原理图如下: 源代码: function canvs_start(){ var c = document.getElementById("star") ...

  4. js使用canvas画五角星以及渐变色,瞎画

    <!DOCTYPE html> <html><head><meta charset="utf-8"><title>星云图 ...

  5. 案例四、1.使用Canvas画一个五角星

    在使用Cnavas元素画一个五角星时,最难的应该是五角星角的坐标. 首先在Canvas元素中,y轴是向下为正. 由于五角星有五个角,圆为360度,所以角与角之间的距离应该为72度. 此时的五角星的十个 ...

  6. python画五角星代码_Python GUI 编程tkinter--画五角星和简单的动画制作

    1.利用Python的tkinter画一个五角星: 2.做一个简单的动画 分析五角心的五个顶点的坐标: 确立五角星的中心点和半径,再确立五角星的五个角的坐标信息,其中五角星的各个角读书为36度,具体的 ...

  7. 使用canvas画美队盾牌

    代码如下: <canvas class="mycanvas" width="500" height="500">你的浏览器不支持 ...

  8. java画五角星_如何用Java程序写出五角星?

    展开全部 第一种,用图形 import java.awt.*; import javax.swing.*; public class WuJiaoXing extends JPanel { priva ...

  9. H5组件Canvas画电子印章

    效果图 代码 <!DOCTYPE html> <html> <head>  <meta charset="UTF-8">  < ...

最新文章

  1. Selenium Firefox启动提示导入收藏夹
  2. sp_MSforeachtable使用方法
  3. 计算Be原子基态能级
  4. 3D Button Suite
  5. jqGrid如何设置jqGrid第一次初始化时不加载任何数据?实现方法!
  6. Django从理论到实战(part17)--模板概述
  7. 方舟非主机服务器无限距离,方舟非专业服务器距离限制怎么解除 | 手游网游页游攻略大全...
  8. java bigDecimal and double
  9. MySql PreparedStatement用法 及 Transaction处理
  10. MySQL服务器安装完之后如何调节性能
  11. win10 安装tensorflow-gpu
  12. centos7播放MP4视频需要MPEG-4 AAC解码器,和H.264(High profile) 解码器
  13. 美赛数学建模O奖论文下载
  14. 位移密码算法挑战 个人答案
  15. 手动释放linux缓存——/proc/sys/vm/drop_caches
  16. freyja 将引入“分组”概念进一步提高维护缓存时的效率
  17. 算法设计 L型组件填图问题
  18. Giant MIDI Piano 安装教程
  19. 路由器桥接显示无法连接服务器,路由器无法桥接怎么办
  20. 三层交换 VLAN 互访配置

热门文章

  1. 数据库中1NF,2NF,3NF的判别
  2. python爬取拼多多数据_Python---数据的爬取与存储
  3. 3秒钟解决windows字符间距变大,输入字母间距变大问题
  4. eclips 安装问题
  5. 微信小程序海报功能(canvas)- - -附效果图
  6. O2O、C2C、B2B、B2C是什么意思 有什么区别
  7. 模糊控制(二)模糊控制——模糊推理
  8. 修改ffmpeg支持文件描述符,以适配android10沙箱机制
  9. linux 运行 epics,EPICS的安装.pdf
  10. 你会的还只有初级工程师的技术吗?灵魂拷问