2014-12-05 63 views
1

我需要获得两个角度之间的最短方向。就像如果Ang1是5而Ang2是355,那么我希望它返回,我需要从Ang1中减去Ang2。获取最短角度路径

我有一些代码会告诉我最短的距离,但不是最短的方向。

功能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

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

如果你从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 不管你的模运算符与负数的相对位置和运作。

可以greately简化它,如果你做的前提条件更为严格,确保a1a2被限制的范围内0..359

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

应该这样做!谢谢! – Zock77 2014-12-05 15:38:50