如何在其轴心(圆心)上旋转圆扇形(或扇形)?
<canvas id="myCanvas" width="300" height="150" style="border:1px solid #d3d3d3;"></canvas>
<script>
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
ctx.rotate(60 * Math.PI / 180); // wrong rotation
ctx.beginPath();
ctx.arc(100, 75, 50, 0, (1/12) * 2 * Math.PI);
ctx.lineTo(100, 75);
ctx.closePath();
ctx.fill();
</script>
答案 0 :(得分:3)
希望这会有所帮助。
旋转绘制的对象可以使用arc
本身作为其第四个参数。这个link也可以为您提供帮助。
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
var startAngle = 0;
var rotatedAngle = 60;
function degtorat (deg){
return deg * Math.PI/180;
}
// degtorat2 looks odd in the first glance but it is not because PI
// is also used as counter variable with deg no matter whether is's
// put after the division
// -> (deg * PI) / 180 as in degtorat
function degtorat2 (deg){
return deg / 180 * Math.PI;
}
setInterval(function(){
ctx.beginPath();
// ctx.arc(x, y, radius, startAngle, endAngle, anticlockwise);
// endangle must also be increased by the same amount of startAngle
ctx.arc(100, 75, 50, degtorat(startAngle), degtorat(startAngle)+(1/12) * 2 * Math.PI);
ctx.lineTo(100,75);
ctx.closePath();
ctx.fill();
// increase angle at 60 degrees
startAngle += rotatedAngle;
},1000);
<canvas id="myCanvas" width="300" height="150" style="border:1px solid #d3d3d3;"></canvas>
按要求对这些操作进行简短说明degtorat(startAngle)+(1/12) * 2 * Math.PI
,一步一步:
整个等式返回以弧度绘制三角形的endAngle。
让我们把它分开:
degtorat(startAngle)
:
我们想要在顺时针方向从某个startAngle
开始绘制一个三角形,因此我们也必须从这个角度开始。但这还不够,因为三角形也应该有一定的尺寸。所以这里(1/12) * 2 * Math.PI
开始发挥作用。
Spoiler:degtorat
转换(主要由人类使用)度数到弧度(总是由HTML5画布上下文操作使用)。 (我刚刚添加了degtorat
degtorat2
来证明无论PI在分割之前还是之后相乘,都会返回正确的弧度。)
(1/12) * 2 * Math.PI
:
必须将这些操作添加到degtorat(startAngle)
,因为三角形应具有一定的大小。要计算此尺寸,我们使用这些操作(1/12) * 2 * Math.PI
。
2 * Math.PI
以弧度表示整个圆圈。一个圆可以包含12个三角形,每个三角形的大小为30度,但我们只能绘制6个三角形,因为我们将30度空白。这就是为什么我们必须将整个圆除以12((1/12)
,6个可见三角形,6个空白三角形)。
但我们想要将可见三角形旋转60度。因此,在绘制出填满整个圆圈30度的第一个可见三角形之后,我们将startAngle
增加60度,以便在第一个startAngle
之后开始绘制下一个三角形60度,并留下30度空白