获得最短的角度路径

时间:2014-12-05 03:37:14

标签: math geometry shortest-path angle smallbasic

我需要在两个角度之间获得最短的方向。就像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

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

当然,这只是根据您选择的角度设定方向。

如果您正在计算从a1a2的角度/方向,则以下伪代码应该为您提供所需内容:

# precondition: [a1,a2] >= 0
angle = ((a2 % 360) - (a1 % 360) + 360) % 360
direction = CLOCKWISE
if angle > 180:
    angle = 360 - angle
    direction = ANTICLOCKWISE

如果差异正好 180°,则优先顺时针方向。

原谅获得角度的复杂表达式,它只是为了确保得到0到359 的值,无论你的模数运算符的相对位置和工作方式是否为负数。

如果您使前提条件更具限制性,则可以大大简化它,确保a1a2仅限于0..359范围:

# precondition: 0 <= [a1,a2] <= 359
angle = (a2 - a1 + 360) % 360