2014-12-05 65 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