2014-11-07 3 views
1
double x = ...;  // -1.0 to 1.0 
double y = ...;  // -1.0 to 1.0 
int deg = (int) ((atan(x/y) * 57.2958) + (y > 0 ? 540 : 360)) % 360; 

지금 당장은 알 수없는 몇 가지 기본 형상. 그걸 보냈다. 위의 코드는 ok-ish에서 작동하지만 잘못 반영된 것처럼 보입니다. mod가 필요하지는 않습니다.학위에 대한 위치 백분율

저는 다소 이상한 시나리오가 있습니다. 빨간색 점이 그 위치에있을 때 그 정도의 출력이 필요합니다. 기본적으로 미러링 된 단위 원입니다. 쉽게 구현 (그리고 어쩌면 형상 원기를 회복)을 찾고

.

답변

2

당신이 필요합니다

degrees = atan2(x, y) * 360.0/(2.0 * M_PI) + 180.0; 

참고 atan2의 사용이 유효한 4 사분면의 결과를 얻을 수 있습니다. atan2은 -π에서 π 범위의 값을 반환하므로 π 라디안 (180도)을 더해야합니다.

또한 x 및 y는보다 일반적인 사용 (atan2(y, x))과 비교하여 바뀝니다.

LIVE DEMO

관련 문제