Javaで結果が[0°、180°]の範囲になるように)で2つの角度メジャーの差(度単位で与えられる)を計算するにはどうすればよいですか?
例えば:
350° to 15° = 25°
250° to 190° = 60°
/**
* Shortest distance (angular) between two angles.
* It will be in range [0, 180].
*/
public static int distance(int alpha, int beta) {
int phi = Math.abs(beta - alpha) % 360; // This is either the distance or 360 - distance
int distance = phi > 180 ? 360 - phi : phi;
return distance;
}
Nickesの回答に加えて、「Signed difference」が必要な場合
int d = Math.abs(a - b) % 360;
int r = d > 180 ? 360 - d : d;
//calculate sign
int sign = (a - b >= 0 && a - b <= 180) || (a - b <=-180 && a- b>= -360) ? 1 : -1;
r *= sign;
編集:
ここで、「a」と「b」は違いを見つけるための2つの角度です。
「d」は違いです。 「r」は結果/最終的な差です。
それらの差の絶対値を取り、180より大きい場合は360°を差し引き、結果の絶対値を取ります。
するだけ
(15 - 350) % 360
方向が問題ではない場合(最小値を生成する方が必要な場合)、逆減算(mod 360)を実行して、2つの最小値を計算します(例:Math.min
)。
以下についてはどうですか:
dist = (a - b + 360) % 360;
if (dist > 180) dist = 360 - dist;
diff = MAX(angle1, angle2) - MIN(angle1, angle2);
if (diff > 180) diff = 360 - diff;