canvas绘制五角星

简介: canvas绘制五角星

canvas绘制五角星


canvas 绘制多边形的通用步骤:

  1. 找到每个点的坐标,形成路径
  2. 设置状态
  3. 绘制

五角星的模样:

网络异常,图片无法展示
|

如果遇到正某形的情况,可以借助圆来计算。 这边,借助两个圆寻找每个点的坐标:

网络异常,图片无法展示
|

  • 五角星的外圈相邻点之间的角度是:360/5 = 72
  • 同理,五角星的内圈相邻点之间的角度是:360/5 = 72
  • 于是,五角星两个相邻点的之间的角度是:72/2 = 36
  • 于是,五角星最右边的点和 x 轴之间的角度是:90-36-36 = 18
  • 于是,直角三角形中斜边为 R,一个夹角是 18,则夹角的那边长度是R*cos(18deg),非夹角的那边长度是R*sin(18deg)
  • 于是,外圈最右边的点坐标是(R*cos(18deg),-R*sin(18deg)),外圈往左的一个点是(R*cos(18+72deg),-R*sin(18+72deg)),以此类推
  • 于是,内圈最右边的点坐标是(r*cos(54deg),-r*sin(54deg)),内圈往左的一个点是(r*cos(54+72deg),-r*sin(54+72deg)),以此类推

这样可以写一个五角星的路径函数,这里注意 cos 函数需要另外封装下,这样更方便使用:

网络异常,图片无法展示
|

五角星需要旋转角度的话,修改成

// ..参数加个rotate即可
ctx.lineTo(
  R * cos(18 + i * angle - rotate) + x,
  -R * sin(18 + i * angle - rotate) + y
);
ctx.lineTo(
  r * cos(54 + i * angle - rotate) + x,
  -r * sin(54 + i * angle - rotate) + y
);

修改 R 和 r 的值会有很多不同感觉的五角星,两者差距越大,五角星越尖锐,反之越圆润。

代码

<canvas id="canvas" width="500" height="500"></canvas>
<script>
  const canvas = document.querySelector("#canvas");
  const ctx = canvas.getContext("2d");
  // 角度转化成弧度
  const getRadianFromAngle = (angle) => (Math.PI / 180) * angle;
  // 封装下cos  sin
  const cos = (angle) => Math.cos(getRadianFromAngle(angle));
  const sin = (angle) => Math.sin(getRadianFromAngle(angle));
  function getStarPath({ ctx, x, y, R, r, rotate = 0 }) {
    ctx.beginPath();
    const horn = 5;
    const angle = 360 / horn;
    for (let i = 0; i < horn; i++) {
      ctx.lineTo( R * cos(18 + i * angle - rotate) + x, -R * sin(18 + i * angle - rotate) + y );
      ctx.lineTo( r * cos(54 + i * angle - rotate) + x, -r * sin(54 + i * angle - rotate) + y );
    }
    ctx.closePath();
  }
  // 1.设置路径
  getStarPath({ ctx, x: 200, y: 200, R: 100, r: 50 });
  // 2.设置状态
  ctx.lineWidth = "3";
  ctx.strokeStyle = "#f69";
  // 3.绘制
  ctx.stroke();
</script>

引用

liuyubobobo 的绘制五角星 视频

liuyubobobo 的 Canvas 绘图与动画基础 视频

liuyubobobo 的 Canvas 绘图详解 视频

目录
相关文章
|
6月前
|
前端开发
canvas绘制圆环
canvas绘制圆环
|
前端开发 关系型数据库 容器
利用Canvas进行绘制XY坐标系
原文:利用Canvas进行绘制XY坐标系 首先来一发图 绘制XY的坐标主要是利用Canvas setLeft和setBottom功能(Canvas内置坐标的功能) 1.首先WPF中的坐标系都是从左到右,从上到下的 即左上角位置(0,0)点,所以XY的Canvas要以(RenderTransf...
1725 0
|
6月前
|
Python
绘制矩形
【5月更文挑战第11天】绘制矩形。
44 1
|
6月前
|
缓存 前端开发 JavaScript
canvas详解01-绘制基本图形
canvas详解01-绘制基本图形
105 2
|
C# 图形学
C#之深入理解GDI+绘制圆弧及圆角矩形等比缩放的绘制
GDI+中对于圆弧的绘制,是以给定的长方形(Rectangle`结构)为边界绘制的椭圆的一部分形成的圆弧。绘制的圆弧的中心为长方形内切椭圆的圆心(如果是正方形,则正方形的...
611 0
C#之深入理解GDI+绘制圆弧及圆角矩形等比缩放的绘制
|
前端开发
Canvas绘制圆形头像
Canvas绘制圆形头像
243 0
Canvas绘制圆形头像
C#编程-132:DrawRectangle绘制矩形
C#编程-132:DrawRectangle绘制矩形
190 0
C#编程-132:DrawRectangle绘制矩形
|
前端开发 算法 图形学
用canvas绘制一个曲线动画——深入理解贝塞尔曲线
用canvas绘制一个曲线动画——深入理解贝塞尔曲线
869 0
|
前端开发 API
Canvas绘制圆点线段
Canvas绘制圆点线段
Canvas绘制圆点线段