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

2022-09-01 14:50:43

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

例如:

350° to 15° = 25°
250° to 190° = 60°

答案 1
    /**
     * 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;
    }

答案 2

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

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”是结果/最终差值。