javascript 填充圆不按预期工作

8zzbczxx  于 2023-03-28  发布在  Java
关注(0)|答案(1)|浏览(115)

我使用的是canvas API,但是当使用CanvasRenderingContext2D.arc(x,y,radius,startAngle,endAngle,counterclockwise)时,它在documentation中提到了以下参数:
x:圆弧中心的水平坐标。
y:弧中心的垂直坐标。
radius:弧的半径。必须为正。
startAngle:弧开始的Angular (以弧度为单位),从x轴正方向开始测量。
endAngle:弧结束的Angular (以弧度表示),从正x轴测量。
逆时针可选:一个可选的布尔值。如果为真,则在起始角和结束角之间逆时针绘制圆弧。默认值为假(顺时针)
我发现,例如,当我设置startAngle为0和endAngle 1.5*MathPI并填充圆时,它会给出一个段,而不是我所期望的圆的3/4。我试图找到一种方法来使用它来使电路的部分不是段,但没有希望。
这是密码

const canvas = document.querySelector('.canvas');

function resizeCanvas() {
  canvas.width = window.innerWidth;
  canvas.height = window.innerHeight;
};

window.addEventListener('resize', resizeCanvas);
resizeCanvas();

const ctx = canvas.getContext('2d');

ctx.beginPath();
ctx.arc(200, 200, 50, 0, Math.PI * 3 / 2, false);
ctx.fillStyle = 'red';
ctx.fill();
* {
  box-sizing: border-box;
}

body,
html {
  margin: 0;
  padding: 0;
}

canvas {
  position: fixed;
  top: 0;
  left: 0;
}
<canvas class="canvas"></canvas>

输出x1c 0d1x
我希望输出是一个从0到3/2*PI的3/4圆。我只是想知道如何使用canvas API来实现我的预期输出。

jfgube3f

jfgube3f1#

当使用

ctx.arc(200, 200, 50, 0, Math.PI * 3/2, false);

这将在两点之间创建一个弧,如名称所示(ctx.arc),当我们填充形状时:它将连接startAngle点到endAngle点。并填充此形状。
要做一个3/2的圆,我们需要从endAngle到圆心画一条线,然后将路径闭合到起始Angular 。
我们可以这样做:

ctx.beginPath();
ctx.arc(200, 200, 50, 0, Math.PI * 3/2, false);
ctx.lineTo(200, 200);
ctx.closePath();
ctx.fillStyle = 'red';
ctx.fill();

并且这将具有圆的3/4,如下所示。
一个一个二个一个一个一个三个一个一个一个一个一个四个一个

相关问题