如何计算Java中两个角度测量值(以度为单位)的差值,结果在[0°,180°]范围内?
例如:
350° to 15° = 25°
250° to 190° = 60°
答案 0 :(得分:39)
/**
* 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;
}
答案 1 :(得分:14)
除了尼克斯回答,如果你想要"签名差异"
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;
编辑:
在哪里&#39; a&#39;和&#39; b&#39;是找到差异的两个角度。
&#39; d&#39;是不同的。 &#39; R&#39;是结果/最终的差异。
答案 2 :(得分:6)
只需取其差值的绝对值,然后,如果大于180,则减去360°并取结果的绝对值。
答案 3 :(得分:5)
只做
(15 - 350) % 360
如果方向无关紧要(你想要产生最小值的那个),那么做反向减法(mod 360)并计算两者的最小值(例如用Math.min
)。 / p>
答案 4 :(得分:3)
以下内容如何:
dist = (a - b + 360) % 360;
if (dist > 180) dist = 360 - dist;
答案 5 :(得分:1)
diff = MAX(angle1,angle2) - MIN(angle1,angle2);
if(diff> 180)diff = 360 - diff;