[로보코드] 코드 (normalize 한 각 계산)


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일
by 한밀 | 2004/05/21 14:30 | 프로젝트
<< 이전 다음 >>