2013-12-18 80 views
2

我想取角度A,並以角度B平滑地旋轉角度,角度爲S,速度隨角度AB之間的距離而減小。而角度A也通過最短路徑轉向角度B平滑轉向

我給出這個模型的腳本:

Function: rotate_to_destination(A , B , S); 
    return (A + (sin((B - A) * (pi/180)) * S)); 

我一直在使用這個和它的作品,除了一個很大的問題:花費A的時候轉向B延長當AB之間的距離恰好爲180.

我對數學沒有太大的貢獻,所以我無法解決問題或巧妙地拿出我自己的。我也沒有找到另一種解決方案。

回答

1

你需要知道A和B之間的最大值與最小值差假設 -180 < =(AB)< = +180,您可以將公式更改爲(A + (sin((B - A) * (pi/360)) * S));

基本上,你需要確定術語(B-A)*(pi/X)永遠不會變爲零,pi,-pi,2 * pi,-2 * pi等等,而是到-pi/2或pi/2。

+0

你是個天才。我其實認爲這個術語永遠不會達到零。然而我反而做了: 'return(A + sign(B-A)+(sin((B-A)*(pi/180))* S));' – FatalSleep

+0

完成!感謝您的幫助。 :) – FatalSleep

+0

所以答案被拒絕。做了更廣泛的測試,就像我應該擁有的一樣。雖然你的建議保持角度A從「最近」方向轉向角度B. – FatalSleep