角度通常用 弧度(radian)表示,所以你要做的就是把任意弧度值「归一化」到 [0, 2π) 之间。
弧度归一
normalizeAngle(angle) {const twoPI = Math.PI * 2;return ((angle % twoPI) + twoPI) % twoPI;}
角度归一
normalizeAngle(deg) {return ((deg % 360) + 360) % 360;}
两个角度之间的最小夹角(差值),而不是单纯的相减
-
返回值在 [-180, 180] 之间,带正负号(正负表示方向)。
-
如果只关心差的大小,可以用
Math.abs()
。
angleDiff(a, b) {let diff = ((b - a + 180) % 360) - 180;return diff < -180 ? diff + 360 : diff;}