尤拉角與四元數都被用來處理影象學中的旋轉。兩者各有優劣,下面我們對它們做詳細的比較。
尤拉角是表示朝向的最簡單最直觀方法,只需儲存繞 x、y、z 軸旋轉的角度,非常容易理解。你可以用vec3來儲存乙個尤拉角:
vec3 eulerangles
( rotationaroundxinradians, rotationaroundyinradians, rotationaroundzinradians)
;
這三個旋轉是依次施加的,通常的順序是:y-z-x(但並非一定要按照這種順序)。順序不同,產生的結果也不同。
不過,面對更加複雜的情況時,尤拉角就顯得力不從心了。例如:
四元數由4個數 [x y z w] 構成(這裡我們不考慮數學上的定義,只考慮影象學方面的應用),rotationaxis 為旋轉軸,rotationangle 為旋轉的角度。下圖的旋轉用四元數可表示為:
四元數的形式不如尤拉角直觀,xyz
xyzxy
z 分量大致代表了各個軸上的旋轉分量,而w
=cos(
rota
tion
angl
e/2)
w=\cos(rotationangle/2)
w=cos(ro
tati
onan
gle/
2)。舉個例子,假設你在偵錯程式中看到了這樣的值[
0.70
00.7
][ 0.7\ 0\ 0\ 0.7 ]
[0.700
0.7]
。x
=0.7
x=0.7
x=0.
7,比 y
yy、z
zz 的大,因此主要是在繞 x 軸旋轉;而 2
arccos(
0.7)
=1.59
2\arccos(0.7) = 1.59
2arccos(0
.7)=
1.59
弧度,所以旋轉角度應該是 90
°90°
90°。
同理,[00
01](
w=1)
[0\ 0\ 0\ 1] (w=1)
[0001]
(w=1
) 表示 rot
atio
nang
le=2
arccos(
1)=0
rotationangle = 2\arccos(1) = 0
rotati
onan
gle=
2arccos(1
)=0,當旋轉角度為 0
00 時因此這是乙個單位四元數(unit quaternion),表示沒有旋轉。
// ogre 中的實現
mat4 torotationmatrix
(quat& q)
參考資料
[1] opengl 教程 旋轉 :
[2] ogre quaternion :
尤拉角與四元數
尤拉角是表達旋轉的最簡單的一種方式,形式上它是乙個三維向量,其值分別代表物體繞座標系三個軸 x,y,z軸 的旋轉角度。第一張 pitch,航空領域表示飛機的俯仰角。繞x軸轉動結果 第二張 yaw,表示飛機的偏航角,繞y軸轉動結果 第三張 roll,表示飛機的翻滾角,繞z軸轉動結果。四元數是由愛爾蘭數...
四元數和尤拉角
1.尤拉角 我們這裡談論尤拉角只討論在笛卡爾座標系下,不考慮飛機座標系 我不確定正規是不是叫這個名字 那種。也就是右手定則確定的笛卡爾座標系。可以把x和y放在水平面,z軸朝上,這樣想象一下。然後,很顯然存在三種旋轉方式,也就是分別繞x,繞y和繞z旋轉。我們分別把三種旋轉稱為roll 繞x軸旋轉 pi...
四元數與尤拉角之間的轉換
在3d圖形學中,最常用的旋轉表示方法便是四元數和尤拉角,比起矩陣來具有節省儲存空間和方便插值的優點。本文主要歸納了兩種表達方式的轉換,計算公式採用3d笛卡爾座標系 圖1 3d cartesian coordinate system from wikipedia 定義圖2 tait bryan ang...