クォータニオン

提供:ペチラボ書庫
ナビゲーションに移動 検索に移動

四元数。

実数 [math]\displaystyle{ a,b,c,d }[/math] と虚数単位 [math]\displaystyle{ i,j,k }[/math] を用いて [math]\displaystyle{ a + bi + cj + dk }[/math] と表される。

ただし、[math]\displaystyle{ i^2=j^2=k^2=ijk=-1 }[/math] である。

積について非可換であることに注意する。


共役

[math]\displaystyle{ q = a + bi + cj + dk }[/math] に対し [math]\displaystyle{ q^* = a - bi - cj - dk }[/math] を考える。

すると、

[math]\displaystyle{ qq^*=q^*q=a^2+b^2+c^2+d^2 }[/math]

となる。

特に、[math]\displaystyle{ ||q||=1 }[/math] のとき、[math]\displaystyle{ q^{-1}=q^* }[/math] である。

3次元ベクトルによる表現

[math]\displaystyle{ \boldsymbol{x}=\begin{bmatrix} x \\ y \\ z \end{bmatrix}, \boldsymbol{i}=\begin{bmatrix} i \\ j \\ k \end{bmatrix} }[/math] のようにすれば、 [math]\displaystyle{ q = a + \boldsymbol{x} \cdot \boldsymbol{i} }[/math] と表示できる。

[math]\displaystyle{ a }[/math] をスカラー部、 [math]\displaystyle{ \boldsymbol{x} }[/math] をベクトル部と呼ぶ。

[math]\displaystyle{ q_1 = a_1 + \boldsymbol{x}_1 \cdot \boldsymbol{i} ,~ q_2 = a_2 + \boldsymbol{x}_2 \cdot \boldsymbol{i} }[/math]

として、積を計算すると、

[math]\displaystyle{ q_1 q_2 = a_1 a_2 - \boldsymbol{x}_1 \cdot \boldsymbol{x}_2 + (a_1 \boldsymbol{x}_2 + a_2 \boldsymbol{x}_1 + \boldsymbol{x}_1 \times \boldsymbol{x}_2) \cdot \boldsymbol{i} }[/math]

と、結構綺麗に書ける。


ここでさらに、

[math]\displaystyle{ q_1 = a_1 + \boldsymbol{x}_1 \cdot \boldsymbol{i} ,~ q_2 = a_2 + \boldsymbol{x}_2 \cdot \boldsymbol{i} ,~ q_3 = a_3 + \boldsymbol{x}_3 \cdot \boldsymbol{i} }[/math]

として3つの積を考える。上記に当てはめて計算して若干整理すると、

[math]\displaystyle{ q_1 q_2 q_3 = a_1 a_2 a_3 - a_1(\boldsymbol{x}_2 \cdot \boldsymbol{x}_3) - a_2(\boldsymbol{x}_3 \cdot \boldsymbol{x}_1) - a_3(\boldsymbol{x}_1 \cdot \boldsymbol{x}_2) - (\boldsymbol{x}_1 \times \boldsymbol{x}_2) \cdot \boldsymbol{x}_3 + \{ a_2 a_3 \boldsymbol{x}_1 + a_3 a_1 \boldsymbol{x}_2 + a_1 a_2 \boldsymbol{x}_3 -(\boldsymbol{x}_1 \cdot \boldsymbol{x}_2) \boldsymbol{x}_3 + a_1 (\boldsymbol{x}_2 \times \boldsymbol{x}_3) + a_2 (\boldsymbol{x}_1 \times \boldsymbol{x}_3) + a_3 (\boldsymbol{x}_1 \times \boldsymbol{x}_2) + (\boldsymbol{x}_1 \times \boldsymbol{x}_2) \times \boldsymbol{x}_3 \}\cdot \boldsymbol{i} }[/math]

整っているようだけど結構大変なことになってきた。合ってるんだろうか。


ここからちょっと天下り的になりながら、三次元ベクトルの回転に対応させていく。

[math]\displaystyle{ q_2 = p = \boldsymbol{p} \cdot \boldsymbol{i} }[/math] とする。 つまり、[math]\displaystyle{ a_2 = 0,~ \boldsymbol{x}_2 = \boldsymbol{p} }[/math] である。

[math]\displaystyle{ q_1 p q_3 = - a_1(\boldsymbol{p} \cdot \boldsymbol{x}_3) - a_3(\boldsymbol{x}_1 \cdot \boldsymbol{p}) - (\boldsymbol{x}_1 \times \boldsymbol{p}) \cdot \boldsymbol{x}_3 + \{ a_3 a_1 \boldsymbol{p} -(\boldsymbol{x}_1 \cdot \boldsymbol{p}) \boldsymbol{x}_3 + a_1 (\boldsymbol{p} \times \boldsymbol{x}_3) + a_3 (\boldsymbol{x}_1 \times \boldsymbol{p}) + (\boldsymbol{x}_1 \times \boldsymbol{p}) \times \boldsymbol{x}_3 \}\cdot \boldsymbol{i} }[/math]


第1項と第2項を消したいことを考えると、[math]\displaystyle{ a_1 = a_3,~ \boldsymbol{x}_1 = -\boldsymbol{x}_3 }[/math]であるとよさそうである。

そのとき、 [math]\displaystyle{ \boldsymbol{x}_1 \times \boldsymbol{x}_2 }[/math] というのは [math]\displaystyle{ \boldsymbol{x}_1 }[/math][math]\displaystyle{ \boldsymbol{x}_2 }[/math] に垂直なベクトルであるから、 ちょうど[math]\displaystyle{ (\boldsymbol{x}_1 \times \boldsymbol{x}_2) \cdot \boldsymbol{x}_3 }[/math] も0になってくれる。

そのようなクォータニオンの組は共役である。

[math]\displaystyle{ q_1 = q = a + \boldsymbol{x} \cdot \boldsymbol{i} }[/math]として、[math]\displaystyle{ q_3 = q^* = a - \boldsymbol{x} \cdot \boldsymbol{i} }[/math]とする。

[math]\displaystyle{ q p q^* = \{ a^2 \boldsymbol{p} +(\boldsymbol{x} \cdot \boldsymbol{p}) \boldsymbol{x} + 2a (\boldsymbol{x} \times \boldsymbol{p}) - (\boldsymbol{x} \times \boldsymbol{p}) \times \boldsymbol{x} \}\cdot \boldsymbol{i} }[/math]

こうして三次元ベクトル [math]\displaystyle{ \boldsymbol{p} }[/math] を別のベクトルに移す変換が得られた。

回転

あらためて、

[math]\displaystyle{ q p q^* = \{ a^2 \boldsymbol{p} +(\boldsymbol{x} \cdot \boldsymbol{p}) \boldsymbol{x} + 2a (\boldsymbol{x} \times \boldsymbol{p}) - (\boldsymbol{x} \times \boldsymbol{p}) \times \boldsymbol{x} \}\cdot \boldsymbol{i} }[/math]

において、ベクトル三重積をもう少し砕くと、

[math]\displaystyle{ q p q^* = \{ (a^2 - ||\boldsymbol{x}||^2) \boldsymbol{p} +2(\boldsymbol{x} \cdot \boldsymbol{p}) \boldsymbol{x} + 2a (\boldsymbol{x} \times \boldsymbol{p}) \}\cdot \boldsymbol{i} }[/math]

この変換が回転になるためには、[math]\displaystyle{ ||qpq^*||=||p|| }[/math]が必要である。


地道に計算する。[math]\displaystyle{ \boldsymbol{x} }[/math][math]\displaystyle{ \boldsymbol{p} }[/math]がなす角を [math]\displaystyle{ \phi }[/math] とする。

[math]\displaystyle{ \begin{eqnarray} ||qpq^*||^2 &=& (a^2-||\boldsymbol{x}||^2)^2||\boldsymbol{p}||^2 + 4a^2 ||\boldsymbol{x} \times \boldsymbol{p}||^2 +4a^2(\boldsymbol{x} \cdot \boldsymbol{p})^2 + 8a (\boldsymbol{x} \cdot \boldsymbol{p})\boldsymbol{x} \cdot (\boldsymbol{x} \times \boldsymbol{p}) +4a(a^2 - ||\boldsymbol{x}||^2)\boldsymbol{p} \cdot (\boldsymbol{x} \times \boldsymbol{p}) \\ &=& (a^2-||\boldsymbol{x}||^2)^2||\boldsymbol{p}||^2 + 4a^2 ||\boldsymbol{x}||^2||\boldsymbol{p}||^2 \sin^2\phi +4a^2||\boldsymbol{x}||^2||\boldsymbol{p}||^2 \cos^2\phi \\ &=& (a^2 + ||\boldsymbol{x}||^2)^2 ||\boldsymbol{p}||^2 \end{eqnarray} }[/math]

したがって、

[math]\displaystyle{ a^2 + ||\boldsymbol{x}||^2 = 1 }[/math]

としたい。 原点中心、半径1の円であるから、

[math]\displaystyle{ a = \cos \frac{\theta}{2} }[/math]

[math]\displaystyle{ ||x|| = \sin \frac{\theta}{2} }[/math]

は条件を満たす。(角度を [math]\displaystyle{ \frac{\theta}{2} }[/math] にしてあるのはあとで都合が良いから)

[math]\displaystyle{ \boldsymbol{x} = \sin{\frac{\theta}{2}} \boldsymbol{n} }[/math] とする。[math]\displaystyle{ (||\boldsymbol{n}|| = 1) }[/math]

また、簡単のため [math]\displaystyle{ ||p||=1 }[/math] とする。

この条件のもとで、[math]\displaystyle{ qpq^* }[/math] が表すベクトルは

[math]\displaystyle{ \begin{eqnarray} && (a^2 - ||\boldsymbol{x}||^2) \boldsymbol{p} +2(\boldsymbol{x} \cdot \boldsymbol{p}) \boldsymbol{x} + 2a (\boldsymbol{x} \times \boldsymbol{p}) \\ &=& \left(\cos^2{\frac{\theta}{2}} - \sin^2{\frac{\theta}{2}} \right) \boldsymbol{p} + \left( 2 \sin^2{\frac{\theta}{2}} \right) (\boldsymbol{n} \cdot \boldsymbol{p}) \boldsymbol{n} + \left( 2\sin{\frac{\theta}{2}}\cos{\frac{\theta}{2}} \right) (\boldsymbol{n} \times \boldsymbol{p}) \\ &=& \left(\cos\theta \right) \boldsymbol{p} + (1-\cos\theta) (\boldsymbol{n} \cdot \boldsymbol{p}) \boldsymbol{n} + \left( \sin\theta \right) (\boldsymbol{n} \times \boldsymbol{p}) \\ &=& (\boldsymbol{n} \cdot \boldsymbol{p}) \boldsymbol{n} + (\cos\theta)(\boldsymbol{p} - (\boldsymbol{n} \cdot \boldsymbol{p}) \boldsymbol{n}) + (\sin\theta) (\boldsymbol{n} \times \boldsymbol{p}) \end{eqnarray} }[/math]


この結果について、

  • 第1項は[math]\displaystyle{ \boldsymbol{n} }[/math]に沿った向きの成分
  • 第2項は[math]\displaystyle{ \boldsymbol{n}から\boldsymbol{p} }[/math]に向けて垂直に伸ばした軸方向の成分
  • 第3項はそれら2軸に垂直な軸方向の成分

と解釈することができる。

これは [math]\displaystyle{ \boldsymbol{n} }[/math] を回転軸として、[math]\displaystyle{ \boldsymbol{p} }[/math] を角度 [math]\displaystyle{ \theta }[/math] だけ回転させた点に相当する。


このように、クォータニオンを掛けることを3次元ベクトルの回転に対応させることができた。

お疲れ様なのらね。