2010-12-29 8 views
2

저는 현재 'Pi-angle'을 사용하여 Y 축에 각도를 반영하려고합니다. 제가 사용하고있는 각도 시스템은 라디안으로, 0은 동쪽, -Pi/2는 북쪽, Pi/2는 남쪽이고 +/- Pi는 서쪽에 있으며 위의 방법을 사용하여 각도를 반영하려고하면 자주 사용합니다 범위를 벗어나는 Pi보다 큰 값을 반환합니다. 어떻게 이런 일이 일어나지 않도록 할 수 있습니까?Y 축에서의 반사 각도

감사합니다,

DLiKS x 축에 대한

답변

4

반사 : 단지 -angle를 사용합니다. Y 축에 대한

반사 :지도 반면 -3 ° -177 °, 177 ° ~ 37 ° 맵이 0에서 분기 컷을 생성

if (angle >= 0) 
     return pi - angle 
    else 
     return -pi - angle 

사용. 0은 pi에 매핑됩니다. (+ pi를 제외하는 [- pi, pi) 간격의 각도가 필요한 경우 "> ="을 ">"로 변경하십시오.

이것은 또한 문제 성명서에서 제시 한대로 입력 각이 [-pi, pi] 범위 내에 있다고 가정합니다. 그렇지 않다면 대칭 modulo 2 * pi (여기서 smod(x,M) = mod(x+M/2,M) - M/2)를 사용하여 정규화해야합니다.

+0

전에 너희들 upvote, 내 수학을 확인 ;-) 이전 편집 잘못되었습니다 –

+0

여전히 잘못된. 각도 = 7 * Pi의 경우 어떻게됩니까? – kellogs

+1

입력 및 출력 각도가 -pi와 + pi 사이가되도록 표준화되었는지 기술적으로 수정하십시오. 그렇지 않으면 올바른 것입니다. –

0

전체 원이 2 * pi이므로 항상 2 * pi를 빼고 각도가 다시 범위 내에 있어야합니다.

2

처음으로 각도를 모듈로 나눈 값을 Pi로 나눈 값. 그래서 C 언어로 :

angle = fmod(angle, 2*Pi); 
if (angle < -Pi) 
    angle = angle + 2*Pi; 

float inverted = Pi - angle; 

추가 처리를하기 전에 항상 입력을 표준화해야합니다.

+0

올바르지 않습니다. 당신은 2 * pi를 모듈로 (modulo pi)가 아닌 각도를 고려해야합니다. –

+0

나를 잡아 : P 지금 upvote! ^^ – kellogs

+0

"%"는 부동 소수점 연산자가 아닌 정수 모듈 연산자이기 때문에 "C 언어"비트를 제거 할 수 있습니다. 대신 fmod()를 사용하십시오. –

0

북쪽을 -Pi/2로 선택하는 이유는 무엇입니까? 단위 원에 sin (angle) = y 좌표와 같은 모든 기본 stuf가 나옵니다.

그러나 질문에 답하면 모든 각도 (k는 임의의 정수)에 k * 2Pi를 추가 할 수 있으며 각도는 동일하게 유지됩니다.

+0

왼쪽 상단에 (0,0)을 사용하는 좌표계와 x 축에 대한 각도가 측정되기 때문에 North는 -Pi/2입니다. 그것은 atan2에 의해 반환 된 기본 각도 시스템입니다. – DLiKS