HOME

Quaternion

(c)1997 Jun Mizutani

[1] Quaternionとは
[2] Quaternionの積
[3] Quaternionと三次元グラフィックス
[4] 回転角からQuaternionを求める

[1] Quaternionとは

Quaternionは数学的には複素数の拡張で

qa = a0 + a1i + a2j + a3k

として表現されます.q = [ q0, ( q1, q2, q3 ) ] と書くこともできます.

Quaternion q の共役(conjugation)をqと記述すると

q = [ q0, -( q1, q2, q3 ) ] と定義されます.

Quaternion q の絶対値は |q| = sqrt( q02 + q12 + q22 + q32 )
となり,絶対値が1のQuaternionを単位Quaternionと呼びます.

単位Quaternionの場合,q = 1/q の関係が成立します.

虚数部(ベクトル部)の i, j, k の積は以下の関係にあります.
ij = k = -jk , i2 = -1
jk = i = -kj , j2 = -1
ki = j = -ik , k2 = -1
ijk = -1


[2] Quaternionの積


qaqb

= (a0 + a1i + a2j + a3k)(b0 + b1i + b2j + b3k)

= a0b0 - a1b1 - a2b2 - a3b3
+ (a0b1 + a1b0 + a2b3 - a3b2) i
+ (a0b2 + a2b0 - a1b3 + a3b1) j
+ (a0b3 + a3b0 + a1b2 - a2b1) k


[3] Quaternionと三次元グラフィックス


単位Quaternion を [w, ( x, y, z ) ] とした場合,ベクトル(x, y, z)を軸としたwの回転を表現することができます. 単位ベクトル u を軸として,角度 2t回転させる場合,quaternion として [cos t, u sin t ] を作る必要があります.
quaternion q は,直接,ベクトル v と quaternionの積に使用してベクトル vを回転させることができます.

v' = q v q

また, quaternion を 3x3 変換行列 M に変換することもできます.
もし quaternion q の要素が [ w, (x,y,z) ] の時, 変換行列は

M =

         { 1-2(yy + zz),   2(xy - wz),   2(xz + wy)}
         {   2(xy + wz), 1-2(xx + zz),   2(yz - wx)}
         {   2(xz - wy),   2(yz + wx), 1-2(xx + yy)}  
となります.


[4] 回転角からQuaternionを求める

座標系をNED系として,
qhead = Z軸まわり(角度φ)
qpitch = Y軸まわり(角度θ)
qbank = X軸まわり(角度ψ)

とした場合,各回転に対するQuaternionは

qhead = [ cos(φ/2), ( 0, 0, sin(φ/2) ) ]
qpitch = [ cos(θ/2), ( 0, sin(θ/2), 0 ) ]
qbank = [ cos(ψ/2), ( sin(ψ/2), 0, 0 ) ]

となります. 通常使用される head, pitch, bank の順に回転させた場合のQuaternionを
T = [t0, ( t1, t2, t3 ) ] とすると

T =qhead qpitchqbank

から以下の関係を得ることができます.

t0 = cos(φ/2)cos(θ/2)cos(ψ/2) + sin(φ/2)sin(θ/2)sin(ψ/2)
t1 = cos(φ/2)cos(θ/2)sin(ψ/2) - sin(φ/2)sin(θ/2)cos(ψ/2)
t2 = cos(φ/2)sin(θ/2)cos(ψ/2) + sin(φ/2)cos(θ/2)sin(ψ/2)
t3 = sin(φ/2)cos(θ/2)cos(ψ/2) - cos(φ/2)sin(θ/2)sin(ψ/2)

よって回転角からQuaternionを求めることができます.

HOME
ご意見・ご感想は,mizutani.jun@nifty.ne.jp まで.