2010-03-19 2 views
1

애니메이션 원형 차트에 레이블을 지정하려고하는데 회전 된 객체가 삼각 함수로 배치 된 객체와 정렬되도록하는 데 많은 어려움을 겪고 있습니다. 따라서, 예를 들어, 내가 중간의 파이 조각이 있으면 것은 각 (9)이며, 트윈 회전 N도되었고, 나는 다음과 같은 코드로 레이블을 배치하려고 :DisplayObject.rotation이 trig 함수와 일치하지 않습니다.

label.x = center.x + Math.cos((theta + n)/180 * Math.PI) * radius; 
label.y = center.y + Math.sin((theta + n)/180 * Math.PI) * radius; 

라벨이 자주 파이 슬라이스의 중심과 정렬되지 않습니다. 또한 파이 차트를 크게 확대하고 있기 때문에 오류가 상당 부분 발생하여 가끔 라벨에 파이 조각이 누락 될 수 있습니다. 오류는 상대적으로 예측할 수없는 것처럼 보이며 반올림 오류와 같이 대단한 것처럼 보입니다. 그러나 trig 함수는 소수점 이하 10 자리까지 평가됩니다. 여기서는 충분하지 않아야합니다.

레이블을 올바르게 배치하려면 어떻게해야합니까?

+0

메모 : 회전을 사용하여 주위에서 레이블을 이동해도 잘 작동하지 않습니다. 중복 된 레이블을 방지하는 알고리즘을 작성할 때 다시 문제가 발생하기 때문입니다. 아! – futuraprime

+0

theta + n은 원형 차트의 중심 주위에서 원형 조각의 회전입니까? – jestro

+0

theta는 파이 조각의 중간 부분입니다. (첫 번째 조각이 25 %를 나타내면 세타가 45 도가되고 두 ​​번째 조각이 50 %를 나타내면 세타는 180 도가됩니다.) 전체 원형은 애니메이션에 의해 n도 회전합니다. – futuraprime

답변

0

RX = xcos @ + ysin @

공예 = -xsin @ + ycos 다음

당신이 (0,1)에서 회전하는 경우 @

RX = 죄 @

스피 = 그럼

@ COS 대신 당신은 Y에 대한 X 및 CoS 죄를 사용해야 위의 Y에 대한 x와 죄에 대한 COS.

label.x = center.x + Math.sin((theta + n) * Math.PI/180) * radius; 
label.y = center.y + Math.cos((theta + n) * Math.PI/180) * radius; 
+1

'Math.PIE'에 대한이 모든 이야기는 나를 배고프게합니다. –

+0

내가 말할 수있는 한, 나의 수학은 정확합니다. 나는 적어도 적절한 삼각 함수를 사용하고있다. – futuraprime

관련 문제