JavaScript如何根据两个归一化角度判断最短转向(解决跨0度问题)
实现方案
核心逻辑是先计算顺时针方向的角度差值,将差值归一化到0~360的区间后,和半圈的180度对比即可:
- 差值小于180度:顺时针路径更短,返回
true - 差值大于180度:逆时针路径更短,返回
false - 差值等于180度:两个方向路径长度一致,可根据业务需求自定义返回值
具体JS实现如下:
function clockwise(a, b) { // 计算顺时针路径的角度差,+360避免负数,取模保证结果在0~360区间 const clockwiseDiff = (b - a + 360) % 360; return clockwiseDiff < 180; }
测试验证示例
你可以用以下场景验证正确性:
clockwise(350, 10)返回true:350度顺时针转20度即可到10度,为最短路径clockwise(10, 350)返回false:10度逆时针转20度即可到350度,为最短路径clockwise(90, 200)返回true:顺时针转110度比逆时针转250度更短clockwise(200, 90)返回false:逆时针转110度比顺时针转250度更短
如果需要调整180度的返回逻辑,比如默认优先逆时针,只需要把判断条件改为clockwiseDiff <= 180即可。
内容的提问来源于stack exchange,提问作者Ood
相关产品推荐
相关产品推荐

