2011-06-13 89 views
0

首先,我做了大量的搜索和檢查其他stackoverflow這篇文章,但無法得到工作的答覆或工作代碼片段。數學不是我的力量。我需要一個例程,它需要一個相機點(CX,CY,CZ),並將它圍繞一個觀察點(LX,LY,LZ)旋轉三個旋轉角度(RX,RY,RZ)。在某些我需要避免的情況下使用歐拉旋轉會導致萬向節鎖定。所以我聽說過使用四元數。使用四元數旋轉3D歐拉點,以避免萬向鎖

我發現這的旋轉轉換成四元數 http://www.euclideanspace.com/maths/geometry/rotations/conversions/eulerToQuaternion/index.htm

,這從四元數轉換回歐拉XYZ旋轉 http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToEuler/index.htm

他們似乎很好地工作,但我需要知道如何使用四元數在LX,LY,LZ周圍旋轉CX,CY,CZ,然後返回新的CX,CY,CZ而不會出現萬向鎖定問題。

有這麼多關於這個,我相信一個很好的解釋和代碼片段將不僅有助於我,但在未來的許多其他人。

所以,如果可以,請幫助。非常感謝。

回答

2

簡短的回答,如果您的四元數是Q和新的相機點是C」

C' = Q*(C-L)*Q^-1 + L 

其中點被增加有CW = 0和乘法和逆根據四元數規則。

具體來說,讓D = C-L。然後,我們讓F = Q * d

Fw = Qw*0 - Qx*Dx - Qy*Dy - Qz*Dz 
Fx = Qw*Dx + Qx*0 + Qy*Dz - Qz*Dy 
Fy = Qw*Dy - Qx*Dz + Qy*0 + Qz*Dx 
Fz = Qw*Dz + Qx*Dy - Qy*Dx + Qz*0 

最後,我們得到C」 = F * Q^-1 + L

Cw' = 0 
Cx' = Fw*Qx - Fx*Qw + Fy*Qz - Fz*Qy + Lx 
Cy' = Fw*Qy - Fx*Qz - Fy*Qw + Fz*Qx + Ly 
Cz' = Fw*Qz + Fx*Qy - Fy*Qx - Fz*Qw + Lz 

但是,要知道,如果你從歐拉表示中創建四元數,你仍然會得到萬向鎖。萬向節鎖是歐拉表示的一個屬性,而四元數將代表相同的變換。要擺脫萬向節鎖定,除非我誤解你如何使用它,否則你需要完全避免歐拉表示。

+0

感謝您的提示。因此,如果將歐拉轉換爲qualternion仍會導致萬向節鎖定,那麼如何在3D空間中將相機位置旋轉並無任何問題地進行旋轉?如果我有XYZ相機位置和旋轉角度?我假設我沒有看到整個圖像,但是應該有一個簡單的方法來拍攝相機位置並在沒有萬向節鎖的情況下同時圍繞所有3個軸旋轉它?還是那個天真? – TallGuy 2011-06-17 13:18:12