Nul*_*ion 19 java math geometry
如何计算Java中两个角度测量值(以度为单位)的差值,结果是在[0°,180°]范围内?
例如:
350° to 15° = 25°
250° to 190° = 60°
Run Code Online (Sandbox Code Playgroud)
Dmi*_*nko 43
/**
* 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;
}
Run Code Online (Sandbox Code Playgroud)
M. *_*han 16
除了尼克斯回答,如果你想要"签名差异"
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;
Run Code Online (Sandbox Code Playgroud)
编辑:
其中'a'和'b'是两个角度来找到差异.
'd'是不同的.'r'是结果/最终差异.
做就是了
(15 - 350) % 360
Run Code Online (Sandbox Code Playgroud)
如果方向无关紧要(您希望产生最小值的方向),则执行反向减法(mod 360)并计算两者的最小值(例如,with Math.min
).
归档时间: |
|
查看次数: |
29587 次 |
最近记录: |