【问题标题】:HTML5: Fill circle/arc by percentageHTML5:按百分比填充圆/弧
【发布时间】:2012-02-14 11:00:41
【问题描述】:

这是我的伪代码:

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.PI 之类的东西,就会绘制整个圆圈。

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

【问题讨论】:

    标签: html canvas kineticjs geometric-arc


    【解决方案1】:

    您的代码运行良好,但您的起始角度应该为零才能达到您的预期。这是工作代码:

    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/

    【讨论】:

      【解决方案2】:

      您的代码很好。你需要有: s=0 即起点必须为零。 如果你想让圆圈在顶部开始绘制,你可以使用: context.rotate(-90 * Math.PI / 180); 但旋转后,您将不得不检查 arc() 的 x,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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-11
        • 1970-01-01
        • 1970-01-01
        • 2021-10-24
        • 2016-01-25
        • 1970-01-01
        相关资源
        最近更新 更多