2013-04-06 100 views

回答

0

檢查this了。 (谷歌是件好事)

這將計算兩個向量之間的角度。 如果向量A是(AX,AY,AZ)和
矢量B是(BX,BY,BZ),然後

它們之間角度的cos爲:

     (ax*bx + ay*by + az*bz) 
    -------------------------------------------------------- 
    sqrt(ax*ax + ay*ay + az*az) * sqrt(bx*bx + by*by + bz*bz) 

爲了計算角度投影到xy平面上的兩個矢量之間,只需忽略z座標。

角的餘弦在x-y平面=

   (ax*bx + ay*by) 
    -------------------------------------- 
    sqrt(ax*ax + ay*ay) * sqrt(bx*bx + by*by 

同樣,計算在x-z平面的兩個向量的投影之間的角度,忽略的y座標。

+0

得到一個角度。我不知道這是什麼意思?我想要在x,y旋轉上的角度,它會使我從0,0,-1到0.559055,0.503937,0.653543。我從中獲得了一個角度,我該怎麼處理它? – 2013-04-06 21:30:07

+0

這會計算角度,你用它來做什麼取決於你...你計算的是什麼?你想把這個角度分成兩個部分嗎? – 2013-04-06 21:35:35

+0

這並不能告訴我如何從3D中獲得0,0,-1到0.559055,0.503937,0.653543(3個角度)。它接近130度,但不是在X,Y和Z軸上旋轉。 – 2013-04-06 21:35:52

0

這聽起來像你想從笛卡爾座標(X,Y,Z)到球面座標(RHO,θ,PSI)轉換。

因爲它們都是單位向量,所以rho的半徑將爲1.這意味着您的大小也將爲1,您可以跳過整個分母並僅使用點積。

在X/Y平面(繞Z軸)旋轉將是你的第一個例子很困難的(0,0,-1),因爲它在X或Y沒有擴展名所以沒有什麼旋轉。 (0,0,-1)與(1,0,0)或(0,1,0)成90度。如果取x軸成爲2θ位置的0角,則通過在施加逆餘弦計算(旋轉關閉X/Y平面的)(X,Y,Z)和( x,y,0),然後你可以跳過點積,並用atan2(y,x)得到theta(x/y旋轉)。

當心gimbal lock這可能引起問題。