我需要在两个角度之间获得最短的方向。就像Ang1是5而Ang2是355那么我希望它返回我需要从Ang1减去得到Ang2。
我有一些代码可以告诉我最短的距离,但不是最短的方向。
function getShortAngle(a1,a2)
{
var angle = (Math.abs(a1 - a2))%360;
if(angle > 180)
angle = 360 - angle;
return angle;
};
trace(getShortAngle(360, 720));
或者在Smallbasic中:
Sub GetShortestpath
angle = Math.Remainder((Math.abs(a1 - a2)),360)
if angle > 180 Then
angle = 360 - angle
EndIf
Return = angle
EndSub
感谢您的帮助!
答案 0 :(得分:1)
当然,这只是根据您选择的角度设定方向。
如果您正在计算从a1
到a2
的角度/方向,则以下伪代码应该为您提供所需内容:
# precondition: [a1,a2] >= 0
angle = ((a2 % 360) - (a1 % 360) + 360) % 360
direction = CLOCKWISE
if angle > 180:
angle = 360 - angle
direction = ANTICLOCKWISE
如果差异正好 180°,则优先顺时针方向。
原谅获得角度的复杂表达式,它只是为了确保得到0到359 的值,无论你的模数运算符的相对位置和工作方式是否为负数。
如果您使前提条件更具限制性,则可以大大简化它,确保a1
和a2
仅限于0..359
范围:
# precondition: 0 <= [a1,a2] <= 359
angle = (a2 - a1 + 360) % 360