Warm tip: This article is reproduced from serverfault.com, please click

javascript-如何使画布圆弧具有尖锐的圆角弧

(javascript - How to make Canvas Arcs having sharp angled arcs)

发布于 2020-11-29 18:56:47

因此出于某种原因,我可能发誓这是arc在canvas标签中始终起作用的方式,但不幸的是,事实并非如此。

因此,我期望并最终希望拥有的最终结果是:

canvas.arc(x,y,r,0,360); //ik this should be Math.PI * 2 
canvas.arc(x,y,r,0,270); //and other Math.PI * #
canvas.arc(x,y,r,0,180); //But I used degrees to help show
canvas.arc(x,y,r,0,90);  //how I'd like it to use it.

它将使这些圈子:

在此处输入图片说明

但是不幸的是,当你执行上面的代码时,它的功能有所不同...它可以很好地创建STROKE部分,但将其填充仅会画出一条从起始角度到终止角度的线并将其填充:

在此处输入图片说明

我能想到的唯一解决方案是以某种方式将圆弧的填充过程覆盖到,而不是将线填充到另一个角度,首先将线填充到弧的中心,然后再返回到结束角度。但是我不知道该怎么做,而且我也不了解beizers想从头开始重新创建弧,以便使用所需的lineTo用法来重新创建弧。

总结:如何使我的实心圆在部分圆的中心具有实际的“角度”?

Questioner
Frustrated programmer
Viewed
0
21.1k 2020-11-30 11:06:50

画布上的圆圈一开始很难缠住你的头,但是对此有一个相当简单的解决方案:

ctx.lineTo();

问题不在于fill()方法,而在于如何绘制笔划。

这是我的处理方式:

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

ctx.beginPath();
ctx.arc(50, 50, 50, Math.PI, Math.PI * 1.5, false);
ctx.lineTo(50, 50);
ctx.closePath();
ctx.fill();
<canvas width="100" height="100"></canvas>

解释一下,完成圆弧绘制后,只需从曲线的一端到圆心绘制一条直线即可解决问题!这是因为fill方法严格地填充了端点之间的所有内容。从技术上讲,这种将线绘制到中心的方法应可与任何局部圆的变体一起使用。