如何计算两个角度测量值的差异?

如何计算Java中两个角度测量值(以度为单位)的差值,结果是在[0°,180°]范围内?

例如:

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; } 

除了尼克斯回答,如果你想要“签名差异”

 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’是两个角度来找到差异。

‘d’是不同的。 ‘r’是结果/最终差异。

只需取其差值的绝对值,然后,如果大于180,则减去360°并取结果的绝对值。

做就是了

 (15 - 350) % 360 

如果方向无关紧要(您希望产生最小值的方向),则执行反向减法(mod 360)并计算两者的最小值(例如,使用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;