2011-12-05 2 views
1

누군가가 Chromium 포럼에이 버그를 언급 한 것처럼 보이지만 해결 방법이 없으므로 누구나 해결 방법을 알고 있는지 궁금합니다.Chrome에서 캔버스 반원 버그 해결 방법

문제는 Chrome에서 캔버스 요소를 사용하여 반 시계 방향으로 반주를 렌더링하려고합니다. 여기

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

다음 크롬에서, 비 크롬에서 바이올린,이다 : 대신이 완전한 원을 렌더링 fiddle

+2

질문을 오해하지 않는 한 시계 반대 방향 반 시계가 '0'에서 'Math.PI'까지입니다. 현재 전체 원과 나머지 절반을 그리며 전체를 효과적으로 그립니다. – pimvdb

+0

좋은 해결 방법은 'Math.PI * 3'대신'Math.PI'를 사용하는 것일 수 있습니다. 해커 일 뿐이지 만, 고교 지오메트리 버그를 해결할 수 있습니다. –

+0

@pimvdb : 아니오, 캔버스가 반 시계 방향으로 진행되지 않습니다. 모든 브라우저는이 경우에 반원을 렌더링하지만 크롬은 – anson

답변

2

버그는 아마 this part of the spec에서 유래 :

반 시계가하면 인수가 생략되거나 거짓이고 endAngle-startAngle이 2π보다 크거나 같거나 반 시계 방향 인수가 true이고 startAngle-endAngle이 235보다 큰 또는 과 같으면 아크는이 원의 전체 원주입니다.

크롬 해당 문장의 두 번째 부분을 존중하기 위해 나타나지 않는 (즉 anticlockwisetrue 경우).

왜 엔드 포인트를 정규화하지 않습니까?

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

그래, 나는 그 주위를 검색하고 생각하는 것을 기억합니다. 그것은 아마도 그것으로 할 수 있습니다. 도움을 주셔서 감사합니다.이 코드 조각은 제가 잘 해내려고 노력하는 것에 맞을 것이라고 생각합니다. – anson

+1

크롬의 버전 31.0.1650.63 (그리고 그 이전 버전 일 가능성이 높음)에서 수정되었습니다. –