To get bearing (-180/+180) or heading(0/360) I (jp) use this:
각을 -180 ~ 180으로나 0 ~ 360 도 normalize 시킬 때 사용되는 소스입니다.
(쉽게 말해 -180 ~ 180 으로 normalize했다는 말은 270도라는 각을 -180 ~ 180 안에있는 -90으로 표현했다는 말입니다. 같은 방식으로 410도를 0 ~ 360 도로 normalize 하면 410- 360인 50도가 나옵니다. )
/** reduce angle to between 0 and 360 degrees. */
public static double reduceHeading(double a) {
return Math.IEEEremainder(a-180, 360)+180;
}
/** reduce angle to between -180 and +180 degrees. */
public static double reduceBearing(double a) {
return Math.IEEEremainder(a, 360);
}
근 데 이게 좀 이상하다. 뭔가 잘 안 맞는 듯 하다. 그냥 잘 알려는 코드를 사용하는게 좋아 보인다.
-180 and +180 으로 normalize 할 때
private double normalRelativeAngle(double angle) { return ((angle + 7*180) % (2*180)) - 180; }
private double normalRelativeAngleRadians(double angle) { return ((angle + 7*Math.PI) % (2*Math.PI)) - Math.PI; }
( 출처 :
http://robowiki.net/cgi-bin/robowiki?BeginnersFAQ )
========================================================
이제 이런 것도 필요 없군요. 로보코드 API에 보면 robocode.util 클래스에서 normalAbsoluteAngle(double angle) 라는 함수와 normalRelativeAngle(double angle) 함수를 이용하면 된 것 같습니다.
(인수와 리턴값은 도가 아닌 라디안입니다. )
최종 수정일 : 2007년 07월 11일