【问题标题】:Canvas half circle bug workaround in ChromeChrome中的画布半圆错误解决方法
【发布时间】:2011-12-06 02:04:57
【问题描述】:

看起来有人确实在 Chromium 论坛上提到了这个错误,但没有解决办法,所以我想知道是否有人知道解决方法。

问题是尝试使用 canvas 元素在 Chrome 中逆时针呈现半圆。相反,这会呈现一个完整的圆圈:

var ctx = document.getElementById('can').getContext('2d');
ctx.beginPath();
ctx.arc(50,50,50,0,Math.PI*3,true);
ctx.fill();
ctx.closePath();

这是一个小提琴,在非 Chrome 中查看,然后在 chrome 中查看:fiddle

【问题讨论】:

  • 逆时针半圈是从0Math.PI,除非我误解了你的问题。您当前正在绘制一个完整的圆和另一个半圆,实际上是在绘制一个完整的圆。
  • 一个好的解决方法可能是尝试使用Math.PI 而不是Math.PI*3 - 我知道这很hacky,但它可以解决那些该死的高中几何错误。
  • @pimvdb:不,不是画布逆时针方向。在这种情况下,所有浏览器都呈现半圆,但 Chrome
  • 这里的想法不是从角度0开始走Math.PI*3,而是从角度0开始,停在Math.PI*3的点,画布就是这样arc 方法有效。
  • 是的,如果您注意到在 chrome 中,pi*3 绘图显示全圆(逆时针时),而非铬显示半圆(逆时针时)

标签: javascript google-chrome html5-canvas geometric-arc


【解决方案1】:

该错误可能源于this part of the spec

如果逆时针参数被省略或为假并且 endAngle-startAngle 等于或大于 2π,或者,如果 逆时针参数为真且 startAngle-endAngle 等于或 大于 2π,那么弧就是这个的整个圆周 圈子。

Chrome 似乎不尊重该声明的第二部分(即当 anticlockwisetrue 时)。

为什么不规范化你的端点?

var end = 3 * Math.PI;
while (end > 2 * Math.PI) {
    end -= 2 * Math.PI;
}

【讨论】:

  • 是的,我记得四处搜索并看到了它,并认为它可能与它有关。感谢您的帮助,我认为这段代码 sn-p 非常适合我正在尝试做的事情。
  • 请注意,Chrome 版本 31.0.1650.63(以及之前的许多版本)中已修复此问题
猜你喜欢
  • 2011-10-25
  • 2012-06-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-04
  • 1970-01-01
  • 2010-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多