本文目錄一覽:
求兩個單位向量之間的歐拉角
如圖若a為一維向量,則由a變換到b旋轉兩次即可。
若a為非一維向量,則可以通過轉換變成一維向量。
所以說,應該通過兩次旋轉即可由a變換到b。
而兩次旋轉可以順序不同,所以這個不解是唯一的。
【僅供參考】
如何用Matlab實現四元數到歐拉角的轉換?(急需轉換的代碼)
MATLAB 2006b之後的版本提供了航空航天工具箱(Aerospace Toolbox),其中有quat2angle函數,就是用於實現四元數到歐拉角轉換的。
基本調用格式:
[r1r2r3]=quat2angle(q)
[r1r2r3]=quat2angle(q,s)
其中q為四元數,r1-r3為歐拉角,s為歐拉轉序(rotation sequence,有的資料譯成“順規”)。
說明幾點:
1、輸出的歐拉角單位是弧度;
2、歐拉角的定義有很多種,應用在不同的領域(有時用的名字,例如Tait-Bryan角)。確切點說,一共有12種定義——第一次旋轉可以繞任何一個坐標軸進行(3),第二、第三次旋轉要繞除上一次旋轉之外的另外兩個坐標軸(2×2),所以,一共可以有3x2x2=12種定義。quat2angle支持這全部12種定義,並以三次旋轉的坐標軸表示,例如'ZYX', 'ZYZ', 'ZXY',等等。默認的轉序是ZYX。
3、上面說的轉序涉及到坐標系的定義,該函數的坐標系定義為Z軸為豎軸,可能與某些領域的習慣不同,需要特別注意。
示例:
[yaw,pitch,roll]=quat2angle([1010])
yaw=
0
pitch=
1.5708
roll=
0
四元素轉歐拉角為什麼不可逆
二者可以相互轉換。
四元數的性質包括1、滿足結合律 2、不滿足交換律 3、乘積的模等於模的乘積 4、乘積的逆等於各個四元數的逆以相反的順序相乘。歐拉角的缺點包括1、 歐拉角的表示方式不唯一。給定某個起始朝向和目標朝向,即使給定yaw、pitch、roll的順序,也可以通過不同的角度組合來表示所需的旋轉。這其實主要是由於萬向鎖(Gimbal Lock)引起的;2、歐拉角的插值比較難;3、計算旋轉變換時,一般需要轉換成旋轉矩陣,這時候需要計算很多sin, cos,計算量較大。
由以上原因決定。
unity 四元數為什麼轉歐拉
四元數是一個比較複雜的數學知識。。為了讓開發者不需要懂太深奧的數學知識,也能操作角度。所以才有了歐拉角,只需要三個值就確定旋轉角度。。但其實旋轉的內部計算方式,是通過四元數實現的。。。
但用歐拉角操作旋轉角度,會產生一個問題,就是在特定情況下,會出現一種叫做“萬向節死鎖”的錯誤。。。為了避免這種錯誤產生,有時則需要先把歐拉角轉換成四元數,來進行旋轉。。等旋轉完成之後,再轉換回歐拉角。。
如果你會使用四元數,那就直接使用四元數就可以了。。。歐拉角是為像我這種數學知識比較差的人準備的。。。。
Unity基礎:歐拉角、四元數
在遊戲開發中,經常會接觸到旋轉,常用的旋轉方式有使用矩陣旋轉,使用歐拉角旋轉和使用四元數旋轉。在本篇中,主要研究歐拉角和四元數。
在Unity的Transform中,Rotation屬性對應的就是歐拉角,一共分為3個軸,x、y和z,而每一個數值對應的是繞對應的軸旋轉的度數。
如上圖所示,表示按照坐標順序旋轉,X軸旋轉30°,Y軸旋轉90°,Z軸旋轉10°。
但歐拉角會出現一個問題: 萬向鎖 。
什麼是萬向鎖?這個不好解釋,感覺只有真正遇到過的才會有所體會,有興趣的可以搜下萬向鎖的相關視頻感受下。
為什麼要使用四元數?
原因有很多,下面是其中的兩個我覺得比較重要的原因:
四元數比較複雜,是一個高級複數,跟二維複數能表示平面上的一個點類似,四元數表示的是思維空間上的一個點,由於是一個四維空間(所以不好想象),表示方式為:
![][1]
[1]:
其中:
![][2]
[2]: 2=j 2=k^2=-1
對一個點 p 的轉換公式為,p'為轉換後的點(至於具體的解釋,可以參考 candycat 前輩的 這篇博客 ):
![][3]
[3]: '=qpq ^{-1}
在四元數中,點 p 的四元數表示方式為
![][5]
[5]: ((x,y,z),0)
其中x,y,z為對應坐標,w量為0方便計算(其他數值也可以,不過轉換後結果不會有影響,我們只關注坐標量x,y,z)。
而旋轉點所需的四元數 q 的表示方式為:
![][4]
[4]: (cos \frac{\theta}{2},(x,y,z)sin\frac{\theta}{2})
其中 theta 為旋轉的角度,x,y,z為旋轉軸。
參考資料後,我的幾何理解是:一個點p要繞一個軸旋轉,如果用四元數進行變換,則要通過一個 輔助軸a ,軸a是原點與旋轉過程中的中間點構成的向量,通過兩次的四元數變換把點p變換到最終點p’(四維的量,不能單純地把xsin(theta/2),ysin(theta/2),zsin(theta/2)理解為歐拉角的x,y,z量)。
當然,四元數是可以通過歐拉角進行構建的:
通過軸-角構建:
當然還有其他方式,需要大家自行查詢官方文檔。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/240280.html