使用svg来画正五角星,主要是使用svg的path功能,通过画出五个角的坐标以及连接线,来组成一个实心的五角星形状。实现效果可以参考butterPig的在线印章设计功能里面的正五角星形状。

其原理主要是利用数学中的三角函数公式,来计算出每个角的相对位置坐标。具体代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
star(width) {
let x = -width / 2;
let y = -((width / 2) / Math.tan(72 / 180 * Math.PI))
let coordB = {
x0: x + width,
y0: y
},
coordD = {
x0: x + width* Math.sin(36 / 180 * Math.PI) * Math.tan(18 / 180 * Math.PI),
y0: y + width * Math.sin(36 / 180 * Math.PI)
},
coordA = {
x0: x + width / 2,
y0: y - width / 2 * Math.tan(36 / 180 * Math.PI)
},
coordC = {
x0: x + width* Math.cos(36 / 180 * Math.PI),
y0: y + width * Math.sin(36 / 180 * Math.PI)
}
//绘制星星
return `${x},${y} ${coordB.x0},${coordB.y0} ${coordD.x0},${coordD.y0} ${coordA.x0},${coordA.y0} ${coordC.x0},${coordC.y0}`
}

该方法画出的正五角星是以它的中心为原点,向周围缩放伸展的。width代表了横向边的最大长度,即五角星的最大宽度,通过改变width的值,可以调整五角星的缩放大小。方法的输出为正五角星的svg路径path,直接赋值到polygon标签的points属性中即可。想移动五角星的位置,可以通过:transform=”‘translate(x,y)’”来对五角星的原点(中心点)进行位移。