将旋转合并到常规多边形算法中

时间:2014-07-19 15:13:58

标签: javascript html5 canvas rotation polygon

我写了这个算法来绘制正多边形

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()功能合并一种旋转多边形的方法,不带

感谢您的帮助。 如果您投票不好,请告诉我为什么我可以改进这个问题。

1 个答案:

答案 0 :(得分:1)

这是生成正多边形的代码,第一个顶点位于零角度右中心位置:

enter image description here

代码使用三角法来旋转多边形而不是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();
}