Jar*_*red 4 javascript html5 rotation html5-canvas
我是新手,<canvas>在数学方面很糟糕。我正在使用此函数在画布上绘制一个简单的等边三角形,该函数已从其他人那里借来了代码(不要讨厌我):
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;
}
Run Code Online (Sandbox Code Playgroud)
该函数仅知道三角形的中心坐标和指向三角形的方向。
当前,它成功绘制了三角形,但“指向”东方。
如何使用Orientation参数(度)旋转三角形,而不像其他答案所示旋转整个画布?
这是一个绘制任何规则多边形和指定角度的函数:
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); }Run Code Online (Sandbox Code Playgroud)
<canvas id="canvas" width=512 height=512></canvas>Run Code Online (Sandbox Code Playgroud)
<canvas id="canvas" width=512 height=512></canvas>Run Code Online (Sandbox Code Playgroud)
请看这个小提琴。您可以将方向作为可选参数发送。它接受“东”、“西”、“北”、“南”。请验证。
` 函数 drawTriangle(PosX, PosY, SideLength, Orientation) {
if (!Orientation) {
Orientation = 'east';
}
context.beginPath();
var sides = 3;
var a = ((Math.PI * 2) / sides);
// the components have negative contributions
if (Orientation === 'west' || Orientation === 'north') {
SideLength *= -1;
}
if (Orientation === 'east' || Orientation === 'west') {
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));
}
}
else if (Orientation === 'south' || Orientation === 'north') {
context.moveTo(PosY, PosX + SideLength);
for (var i = 1; i < sides + 1; i++) {
context.lineTo(PosY + SideLength * Math.sin(a*i), PosX + SideLength * Math.cos(a*i));
}
}
context.stroke();
context.closePath();
Run Code Online (Sandbox Code Playgroud)
}`