6

这是我的伪代码:

var percentage = 0.781743; // no specific length
var degrees = percentage * 360.0;
var radians = degrees * Math.PI / 180.0;

var x = 50;
var y = 50;
var r = 30;
var s = 1.5 * Math.PI;

var context = canvas.getContext('2d');
context.beginPath();
context.lineWidth = 5;
context.arc(x, y, r, s, radians, false);
context.closePath();
context.stroke();

我正在使用KineticJS库来控制我制作的形状并根据需要重新绘制它们。我的问题是上面的代码根本不起作用。我假设我的数学不正确,因为如果我更改radians为类似4.0 * Math.PIis 绘制整个圆圈。

我一直在使用HTML5 Canvas Arc Tutorial作为参考。

4

2 回答 2

11

您的代码工作得很好,但是您的起始角度应该为零才能达到您的期望。这是工作代码:

http://jsfiddle.net/HETvZ/

我认为你的困惑是从什么角度出发的。这并不意味着它从该点开始,然后向其添加 endAngle 弧度。这意味着角度从那个点开始,绝对在 endAngle 弧度点结束。

所以如果你的 startAngle 是 1.0 而 endAngle 是 1.3,你只会看到一个 0.3 弧度的弧。

如果您希望它按照您的想法工作,您将添加 startAngle 到您的 endAngle:

context.arc(x, y, r, s, radians+s, false);

就像在这个例子中:http: //jsfiddle.net/HETvZ/5/

于 2012-01-19T19:25:18.387 回答
0

你的代码很好。您需要: s=0 即起点必须为零。如果你想让圆圈在顶部开始绘制,你可以使用: context.rotate(-90 * Math.PI / 180); 但是在旋转之后你必须检查 arc()'sx,y 参数。我像这样使用它:

context.rotate(-90 * Math.PI / 180);
context.arc(-200, 200, 150, startPoint, radian, false); 
context.lineWidth = 20;
context.strokeStyle = '#b3e5fc';
context.stroke();
context.closePath();

在此之后,我需要以文本形式显示百分比,所以我做了:

context.rotate(90 * Math.PI / 180);
context.fillStyle = '#1aa8ff';
context.textAlign = 'center';
context.font = "bold 76px Verdana";;
context.textBaseline = "middle";
context.fillText("50%", 200, 200);
于 2017-07-17T19:12:57.020 回答