2014-01-20 329 views
0

我在3D中移動一個點。從一開始就要清楚,根據Matlab的文檔,「方位角和仰角是以弧度爲單位的角位移,方位角是x軸平面上的逆時針角,從正x軸測量,仰角是從xy平面起的仰角。 r是從原點到點的距離。「我將稱方位角爲Theta,仰角爲Phi。現在,我想確保Theta和Phi角度在適當範圍內(以弧度表示)。據這本書「3D數學底漆圖形和遊戲開發」規定如下球面座標matlab中Theta和Phi角的範圍?

  1. 如果p < -90,再加入360至P直至p≥-90。
  2. 如果p≥270,則從p中減去360直到p≤270。
  3. 如果p> 90,則將h添加180並設置p = 180-p。
  4. 如果h≤-180,那麼將360加到h直到h> -180。
  5. 如果h> 180,然後減去從h 360直到ħ≤180

其中p是披和h是西塔在我的情況。本書使用左手規則。在Matlab我的實現代碼

if Theta > pi 
    Theta = Theta - 2*pi; 
end 
if Theta <= -pi 
    Theta = Theta + 2*pi; 
end 

if Phi < -pi/2 
    Phi = Phi + 2*pi; 
end 
if Phi > (3*pi)/2 
    Phi = Phi - 2*pi; 
end 

if Phi > pi/2 <-------- here the problem 
    Theta = Theta + pi; 
    Phi = pi - Phi; 
end 

我的問題是,一旦披= 1.6(弧度)我點不能再和木棍走在其位置與步進來回一步。

+0

那裏的問題是到目前爲止提供的代碼它並不明顯。我認爲你正在某種循環中出現 - 你是如何設定的?什麼意思是「來回走動」 - 在哪些價值觀之間? – nkjt

+0

@nkjt,兩個角度增加1弧度。一旦Phi達到1.6,一切都會出錯。我的問題是我的代碼正確的角度披?我敢肯定Theta,因爲我已經在2D中測試過了,並且工作正常。 – CroCo

回答

0

我已經通過修改代碼解決了這個問題,下面

if Phi > pi 
    Phi = 0; 
end 
if Phi < 0 
    Phi = pi; 
end