我写了这个算法来绘制正多边形:
var sides = 6,
radius = 50;
ctx.beginPath();
ctx.moveTo(x, y - radius);
for(n = 1; n <= sides; n++)
ctx.lineTo(
x + (radius * Math.sin(n * 2 * Math.PI / sides)),
y + (-1 * radius * Math.cos(n * 2 * Math.PI / sides))
);
ctx.stroke();
它工作得非常好,但我需要使用ctx.rotate()
功能合并一种旋转多边形的方法,不带。
感谢您的帮助。 如果您投票不好,请告诉我为什么我可以改进这个问题。
答案 0 :(得分:1)
这是生成正多边形的代码,第一个顶点位于零角度右中心位置:
代码使用三角法来旋转多边形而不是context.rotate
。
function regularPolygon(cx,cy,sides,radius,radianRotation){
var deltaAngle=Math.PI*2/sides;
var x=function(rAngle){return(cx+radius*Math.cos(rAngle-radianRotation));}
var y=function(rAngle){return(cy+radius*Math.sin(rAngle-radianRotation));}
ctx.beginPath();
ctx.moveTo(x(0),y(0));
for(n = 1; n <= sides; n++){
var angle=deltaAngle*n;
ctx.lineTo(x(angle),y(angle));
}
ctx.closePath();
ctx.stroke();
}