javascript - 如何在不旋转整个 Canvas 的情况下旋转三 Angular 形?

标签 javascript html rotation html5-canvas

我刚开始使用 <canvas>数学很差。我在我的 Canvas 上绘制了一个简单的等边三 Angular 形,这个函数借用了别人的代码(不要恨我):

drawTriangle(PosX, PosY, SideLength, Orientation) {
    context.beginPath();

    var sides = 3;

    var a = ((Math.PI * 2) / sides);

    context.moveTo(PosX + SideLength, PosY);

    for (var i = 1; i < sides + 1; i++) {
        context.lineTo(PosX + SideLength * Math.cos(a*i), PosY + SideLength * Math.sin(a*i));
    }

    context.closePath();

    return true;
}

该函数只会知道三 Angular 形的中心坐标和指向它的方向,没有其他信息。

它目前已成功绘制三 Angular 形但“指向”东方。

如何使用 Orientation 旋转三 Angular 形参数(度)而不像其他答案建议的那样旋转整个 Canvas ?

最佳答案

这是一个绘制任意正多边形和指定 Angular 函数:

var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;

var sideCount=3;
var size=40;
var centerX=50;
var centerY=50;
var strokeWidth=4;
var strokeColor='purple';
var fillColor='skyblue';
var rotationDegrees=0;
var rotationIncrement=1;
var nextTime=0;
var delay=1000/60*1;

requestAnimationFrame(animate);

function animate(time){
    if(time<nextTime){requestAnimationFrame(animate);return;}
    nextTime=time+delay;
    ctx.clearRect(0,0,cw,ch);
    drawPolygon(centerX,centerY,sideCount,size,strokeWidth,strokeColor,fillColor,rotationDegrees);
    rotationDegrees+=rotationIncrement;
    requestAnimationFrame(animate);
}

function drawPolygon(centerX,centerY,sideCount,size,strokeWidth,strokeColor,fillColor,rotationDegrees){
    var radians=rotationDegrees*Math.PI/180;
    ctx.translate(centerX,centerY);
    ctx.rotate(radians);
    ctx.beginPath();
    ctx.moveTo (size * Math.cos(0), size * Math.sin(0));          
    for (var i = 1; i <= sideCount;i += 1) {
        ctx.lineTo (size * Math.cos(i * 2 * Math.PI / sideCount), size * Math.sin(i * 2 * Math.PI / sideCount));
    }
    ctx.closePath();
    ctx.fillStyle=fillColor;
    ctx.strokeStyle = strokeColor;
    ctx.lineWidth = strokeWidth;
    ctx.stroke();
    ctx.fill();
    ctx.rotate(-radians);
    ctx.translate(-centerX,-centerY);    }
<canvas id="canvas" width=512 height=512></canvas>
<canvas id="canvas" width=512 height=512></canvas>

关于javascript - 如何在不旋转整个 Canvas 的情况下旋转三 Angular 形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38238282/

相关文章:

silverlight - WP7 : Rotating a popup + content?

javascript - 在 ckeditor 中为按键添加事件监听器代码

JavaScript 没有按照我的要求做!这是为什么?

css - 排列不同大小的 div block

javascript - jQuery 幻灯片效果与 jQuery UI 位置冲突

javascript - (Javascript)如何删除警报框后的 'undefined'

c - 仅使用 C 中的按位运算符向右循环 n

javascript - 多个 Canvas 不起作用

javascript - Chrome 中的 V8 原生语法

objective-c - TSAlertView 启用设备旋转