canvas-五角星

作者: 我只会吃饭 | 来源:发表于2019-06-07 18:50 被阅读123次

参悟参悟,绘制一个属于你的五角星吧,结合之前知识点,完全可以绘制出一个标准的五角星
效果:


image.png

开始摩拳擦掌

屡屡想法

  1. 五角星有几个角?
    五个角!
    错啦~
    十个角: 分为五个外角,五个内角

  2. 找准角的坐标,将每个角都连接起来,那么五角星就出来了

我们可以先找外角(图上所示)

  1. 红色的线所呈现的夹角就是两个外角形成的夹角 360 / 5 = 72°
  2. 三点钟方向0 °~ 到外角起始角的度数 18 ° = 90° - 72 °
  3. 好滴,到这的话可以明白 从18° 开始 每加 72°就到下一个外角

那么内角同理:
黄色的结束角位于红色的夹角中间(角平分线上),那么它的角度就为36° ,然后黄色的起始角~黄色的结束角则为 54° = 36°+ 18°
内角从54°开始,每加72°则会到下一个内角

先来个内外圆

ctx.beginPath();
// 外圆
ctx.arc(250, 250, 200, 0, 2 * Math.PI);
// 内圆
ctx.arc(250, 250, 100, 0, 2 * Math.PI);

ctx.stroke();

ctx.closePath();

画星星的路径****

ctx.beginPath();
ctx.lineWidth = 4;

// 绘制星星路径
for (var i = 0; i < 5; i++) {
    ctx.lineTo(Math.cos((18 + i * 72) / 180 * Math.PI) * 200 + 250, -Math.sin((18 + i * 72) / 180 * Math.PI) * 200 + 250);
    ctx.lineTo(Math.cos((54 + i * 72) / 180 * Math.PI) * 100 + 250, -Math.sin((54 + i * 72) / 180 * Math.PI) * 100 + 250);
}

ctx.closePath();
ctx.stroke();

下面不重要:

/ 原点
ctx.beginPath();
ctx.arc(250, 250, 5, 0, 2 * Math.PI, false);
ctx.fill();

ctx.font = '16px bold';
ctx.fillStyle = 'red';

// 大圆的夹角两条边
ctx.beginPath();
ctx.lineWidth = 2;
ctx.strokeStyle = 'red';
ctx.moveTo(250, 250);
// deg(度数) = 份 / 180 * Math.PI 
// Math.cos(deg) 临边比斜边 : X轴
// Math.sin(deg) 对边比斜边 : Y轴
ctx.lineTo(Math.cos(18 / 180 * Math.PI) * 200 + 250, -Math.sin(18 / 180 * Math.PI) * 200 + 250);
ctx.fillText('起始角', Math.cos(18 / 180 * Math.PI) * 200 + 250, -Math.sin(18 / 180 * Math.PI) * 200 + 250);
ctx.moveTo(250, 250);
ctx.lineTo(Math.cos(90 / 180 * Math.PI) * 200 + 250, -Math.sin(90 / 180 * Math.PI) * 200 + 250);
ctx.fillText('结束角', Math.cos(90 / 180 * Math.PI) * 200 + 250, -Math.sin(90 / 180 * Math.PI) * 200 + 250);

ctx.stroke();

// 大圆的夹角
ctx.beginPath();
ctx.arc(250, 250, 20, -18 / 180 * Math.PI, -Math.PI / 2, true);
ctx.fillText('72°', 260, 230);

ctx.stroke();

// 0° 到 -18°
ctx.beginPath();
ctx.arc(250, 250, 40, -18 / 180 * Math.PI, 0);
ctx.fillText('18°', 300, 250);

ctx.stroke();

// 小圆
ctx.beginPath();
ctx.strokeStyle = 'orange';
ctx.fillStyle = 'orange';

// 小圆的角的两条边
ctx.moveTo(250, 250);
ctx.lineTo(Math.cos(54 / 180 * Math.PI) * 100 + 250, -Math.sin(54 / 180 * Math.PI) * 100 + 250);
ctx.fillText('结束角', Math.cos(54 / 180 * Math.PI) * 100 + 250, -Math.sin(54 / 180 * Math.PI) * 100 + 250);

ctx.moveTo(250, 250);
ctx.lineTo(350, 250);
ctx.fillText('起始角', 350, 250);

ctx.stroke();

// 小圆的角
ctx.beginPath();
ctx.arc(250, 250, 60, 0, -54 / 180 * Math.PI, true);
ctx.fillText('54°', 300, 210);
ctx.stroke();

canvas-绘制矩形及弧形

相关文章

  • canvas效果案例:安卓机器人

    利用之前所学的线的样式及上节的弧形画一个简单的机器人吧! canvas-五角星

  • canvas-安卓机器人

    利用之前所学的线的样式及上节的弧形画一个简单的机器人吧! canvas-五角星

  • canvas基础知识总结

    一、Canvas-绘制文字 1、属性 二、canvas-设置阴影 三、canvas-创建路径-绘制矩形和圆形 1、...

  • canvas-安卓机器人

    利用之前所学的线的样式及上节的弧形画一个简单的机器人吧! canvas-五角星 作者:LH链接:https://w...

  • canvas-五角星

    参悟参悟,绘制一个属于你的五角星吧,结合之前知识点,完全可以绘制出一个标准的五角星效果: 开始摩拳擦掌 屡屡想法 ...

  • canvas小游戏-爱心鱼(含源码下载地址)

    **最后完成效果 源代码地址:https://github.com/zhaoyuMua/canvas- 1、准备工...

  • turtle库

    画五角星(一) 画五角星(二) 画五角星(三)

  • NFH.006 - Canvas高级与Chart.js

    12.16学习经验分享# Bruce_Zhu于2016.12.16 一、canvas-创建路径绘制线条(直线和折线...

  • jQuery五角星评分(end方法)

    当鼠标移入空心五角星时,该五角星和其前面的五角星变成实心。鼠标离开时,所有五角星为空心。当鼠标点击某一空心五角星时...

  • 小白学canvas-绘制正多边形、五角星

    绘制正多边形 第一种方法就是发挥强大的数学能力,计算出各个顶点的位置,然后moveTo(),lineTo()。第二...

网友评论

    本文标题:canvas-五角星

    本文链接:https://www.haomeiwen.com/subject/mvidxctx.html