雖然還沒有搞得特別明白,這一次說一下四元數與尤拉角之間的轉換。
單位四元數(unit quarternion)可以用於表示三維空間裡的旋轉[1]。它與常用的另外兩種表示方式(三維正交矩陣和尤拉角)是等價的,但是避免了尤拉角表示法中的萬向鎖問題。比起三維正交矩陣表示,四元數表示能夠更方便地給出旋轉的轉軸與旋轉角。(維基百科)工具:方向余弦矩陣
設 q 為乙個單位四元數,而 p 是乙個純四元數,定義 rq下面進行推導過程:(p)=
qpq−
1 則 r
q(p)
) 也是乙個純四元數,可以證明 rq 確實表示乙個旋轉,這個旋轉將空間的點 p 旋轉為空間的另乙個點rq
(p))
。(維基百科四元數與空間旋轉)
已知,單位四元數 q=
q0+q
1i+q
2j+q
3k和純四元數q=
0+xi
+yj+
zk,rq(
p)=q
pq−1
表示乙個旋轉。則:r
q(p)
=(q0
+q1i
+q2j
+q3k
)⋅(0
+xi+
yj+z
k)⋅(
q0−q
1i−q
2j−q
3k)
將上式按照乘法分配律展開式子太長,可以將三個式子全部表示為矩陣(向量),然後相乘,最終化簡成下面的形式: rq
(p)=
⎡⎣⎢⎢
q20+
q21−
q22−
q232
(q1q
2+q0
q1)2
(q1q
3+q0
q2)2
(q1q
2−q0
q3)q
20−q
21+q
22−q
232(
q2q3
+q0q
1)2(
q1q3
+q0q
2)2(
q2q3
−q0q
1)q2
0−q2
1−q2
2+q2
3⎤⎦⎥
⎥⎡⎣⎢
xyz⎤
⎦⎥這個就是四元數表示旋轉的旋轉矩陣。
cosα⋅i
+cosβ⋅
j+cosγ⋅k
用尤拉角表示旋轉的方向余弦矩陣: rx
(α)=
⎡⎣⎢1
000cosα−
sinα
0sin
αcosα⎤
⎦⎥ r
y(β)
=⎡⎣⎢
cosβ
0sinβ0
10−sinβ0
cosβ⎤⎦
⎥ rz
(γ)=
⎡⎣⎢cosγ−
sinγ
0sin
γcosγ0
001⎤
⎦⎥之前說過,尤拉旋轉是要有順序的,我們使用的是zxy順規: a=
rz(γ
)rx(
α)ry
(β)
=⎡⎣⎢
1000
cosα
−sinα0
sinα
cosα⎤⎦
⎥⎡⎣⎢
cosβ
0sinβ0
10−sinβ0
cosβ⎤⎦
⎥⎡⎣⎢
cosγ
−sinγ0
sinγ
cosγ00
01⎤⎦
⎥ =⎡
⎣⎢cosγ
cosβ
+sin
γsin
αsin
βcos
γsin
αsinβ−
sinγ
cosβ
cosα
sinβ
sinγ
cosα
cosγ
cosα
−sin
αsin
γsin
αcosβ−
sinβ
cosγ
sinγ
sinβ
+cos
γsin
αcos
βcos
αcosβ⎤
⎦⎥ =
⎡⎣⎢a
11a21a
31a12a
22a32a
13a23a
33⎤⎦⎥
用字母表示前面的式子,可以表示
tanβ=a
13a33,
−sinα=
a32,tanγ=
a12a22
則這樣就用四元數表示了尤拉角,在後面的姿態解算中就可以直接轉換成程式**使用了。
尤拉角旋轉還是按照zxy順規,分解為三次旋轉;
可得:這樣就得到了尤拉角到四元數的轉化,在這兩種轉換的過程中,也使用了不少的矩陣,也涉及到了方向余弦矩陣等,這些不詳細說了。。翻了好多線代資料。
學會尤拉角和四元數之間的像話轉換之後對四元數和尤拉角有了相對清晰的認識之後就可以直接寫程式了。(本文手打,字母和角度太多,會有錯誤….)
慣性導航之認識四元數(四)
之前說到,使用尤拉角積分和方向余弦積分求得角度並不合適,而比較合適的是四元數。在討論 四元數 之前,我們來想想對三維直角座標而言,在物體旋轉會有何影響,可以擴充三維直角座標系統的旋轉為三角度系統 three angle system 在game programming gems中有提供這麼一段 簡單...
尤拉角與四元數
尤拉角是表達旋轉的最簡單的一種方式,形式上它是乙個三維向量,其值分別代表物體繞座標系三個軸 x,y,z軸 的旋轉角度。第一張 pitch,航空領域表示飛機的俯仰角。繞x軸轉動結果 第二張 yaw,表示飛機的偏航角,繞y軸轉動結果 第三張 roll,表示飛機的翻滾角,繞z軸轉動結果。四元數是由愛爾蘭數...
四元數與尤拉角
尤拉角與四元數都被用來處理影象學中的旋轉。兩者各有優劣,下面我們對它們做詳細的比較。尤拉角是表示朝向的最簡單最直觀方法,只需儲存繞 x y z 軸旋轉的角度,非常容易理解。你可以用vec3來儲存乙個尤拉角 vec3 eulerangles rotationaroundxinradians,rotat...