search
LoginSignup
14

More than 3 years have passed since last update.

posted at

updated at

クォータニオンを真に理解する qpq-1の導出

TL;DR;

ある頂点Pを任意の軸Aの周りにθ回転させた時の頂点P'は、
ベクトル空間上では、以下のように表すことが出来ます。

式1 (ベクトル空間による頂点の回転式)

\begin{multline}
\vec{P}' = \vec{P}\cos\theta + (\vec{A} \times \vec{P})\sin\theta + \vec{A} (\vec{A}\vec{P})(1 - \cos\theta)
\end{multline}

上記のベクトル式は、「クォータニオン(四元数) q」を使って表すと

\begin{multline}

\vec{P}' = q p q^{-1}

\end{multline}

と表すことが出来ます。

本記事は式1のベクトル式をクォータニオンに置き換える方法とqpq-1までの導出過程を記載します。

なおベクトルは大文字で、複素数は小文字で表現し、
なるべく説明を簡略化させるため、基礎的なベクトル空間の知識があることを想定しています。

ハミルトンの複素数 (クォータニオン)

2次元の世界では複素数( $\cos\theta + \mathbf{i}\sin\theta$ )を使えば、ユークリッド平面上の頂点を簡単に回転せられるこが分かっていました。

同様に3次元の世界においても、複素数を使って頂点を回転させることが出来るのではないかと考えられ、ハミルトンによって発見されました。

ハミルトンは、従来の複素数(x + yi)を拡張し、
以下の関係式が成立する「3つの独立した虚数」を新たに考え出しました。

i^2 = j^2 = k^2 = ijk =  -1 \\
ij = -ji = k \\
jk = -kj = i \\
ki = -ik = j \\

本記事では、この3つの独立した虚数を用いて表される式 c を「ハミルトンの複素数」と呼びます。

\mathbf{c} = w + xi + yj + zk \quad \text{(w, x, y, zは実数)}

ハミルトンの複素数の計算法則について

ここではハミルトンの複素数c は、以下の計算法則を持つことを確認しておきます。
これらの法則は、 $qpq^{-1}$ 導出過程で利用します。

積の結合法則

\mathbf{c_1}\,(\mathbf{c_2}\mathbf{c_3}) = (\mathbf{c_1}\mathbf{c_2}) \,\mathbf{c_3}

積の分配法則

\begin{align} 
(\mathbf{c_1} + \mathbf{c_2}) \,\mathbf{c_3} &= \mathbf{c_1}\mathbf{c_3} + \mathbf{c_2}\mathbf{c_3} \\
\mathbf{c_1}\, (\mathbf{c_2} + \mathbf{c_3}) &= \mathbf{c_1}\mathbf{c_2} + \mathbf{c_1}\mathbf{c_3} 
\end{align}

積は非可換

\begin{align} 
c_1c_2 &= (w_1 + x_1i + y_1j + z_1k)(w_2 + x_2i + y_2j + z_2k) \\
       &= (w_1w_2 - x_1x_2 - y_1y_2 - z_1z_2) \\
          &\quad + i\, (w_1x_2 + w_2x_1 \; {\color{red}{+}} \; y_1z_2  \; {\color{red}{-}} \;  z_1y_2) \\
          &\quad + j\, (w_1y_2 + w_2y_1 \; {\color{red}{+}} \; z_1x_2 \; {\color{red}{-}} \; x_1z_2) \\
          &\quad + k\, (w_1z_2 + w_2z_1 \; {\color{red}{+}} \; x_1y_2 \; {\color{red}{-}} \; y_1x_2)
\end{align}
\begin{align}
c_2c_1 &= (w_2 + x_2i + y_2j + z_2k)(w_1 + x_1i + y_1j + z_1k) \\
       &= (w_1w_2 - x_1x_2 - y_1y_2 - z_1z_2) \\
          &\quad + i\, (w_1x_2 + w_2x_1 \; {\color{red}{-}} \; y_1z_2 \; {\color{red}{+}} \; z_1y_2) \\
          &\quad+ j\, (w_1y_2 + w_2y_1 \; {\color{red}{-}} \; z_1x_2 \; {\color{red}{+}} \; x_1z_2) \\
          &\quad+ k\, (w_1z_2 + w_2z_1 \; {\color{red}{-}} \; x_1y_2 \; {\color{red}{+}} \; y_1x_2) \\
\end{align}

従って $c_1c_2 \neq c_2c_1$

cc

\begin{align}
cc &= (w + xi + yj + zk) \; (w + xi + yj + zk) \\
   &= (w^2 - x^2 - y^2 - z^2) + 2wxi + 2wyj + 2wzk
\end{align}

特に c が純虚数、つまり w = 0 のとき、

\begin{align}
cc &= (xi + yj + zk) \; (xi + yj + zk) \\
   &= - x^2 - y^2 - z^2 \\
   &= - |c|^2
\end{align}

ベクトル → ハミルトンの複素数

ハミルトンはベクトル空間上の頂点P(<x, y, z>)を3つの独立した虚数を使って、以下のように定義しました。

任意の頂点P <x,y,z> を表すハミルトンの複素数 p
$p = x \, \mathbf{i} + y \, \mathbf{j} + z \, \mathbf{k}$

これによって「ベクトルとハミルトンの複素数」は、その成分を通じてつなげることが出来ます。

ベクトルのスカラー倍をハミルトンの複素数を用いて表す

ベクトルのスカラー倍とその演算結果

\vec{P}' = k\vec{P} = \; <kx, ky, kz>

であるから、
ベクトルのスカラー倍は、ハミルトンの複素数を用いると以下のように表せます。

\vec{P}' = k\vec{P} = kp

ベクトルの内積と外積をハミルトンの複素数を用いて表す

ベクトルの内積と外積をハミルトンの複素数を用いて表す前に、
p1とp2において以下の関係があることを確認しておきます。

\begin{align}
p_1 \, p_2 &=  (x_1 \mathbf{i} + y_1 \mathbf{j} + z_1 \mathbf{k}) \, (x_2 \mathbf{i} + y_2 \mathbf{j} + z_2 \mathbf{k} ) \\
&= -\, (x_1x_2 + y_1y_2 + z_1z_2) \\
 &\quad + \mathbf{i} \, (y_1z_2 - z_1y_2) \\
 &\quad + \mathbf{j} \, (z_1x_2 - x_1z_2) \\
 &\quad + \mathbf{k} \, (x_1y_2 - y_1x_2) \\
&= -w + x \, \mathbf{i} + y\, \mathbf{j} + z\, \mathbf{k}
\end{align}
\begin{align}
p_2 \, p_1 &= (x_2 \mathbf{i} + y_2 \mathbf{j} + z_2 \mathbf{k}) \, (x_1 \mathbf{i} + y_1 \mathbf{j} + z_1 \mathbf{k} ) \\
&= -\, (x_1x_2 + y_1y_2 + z_1z_2) \\
 &\quad - \mathbf{i} \, (y_1z_2 - z_1y_2) \\
 &\quad - \mathbf{j} \, (z_1x_2 - x_1z_2) \\
 &\quad - \mathbf{k} \, (x_1y_2 - y_1x_2) \\
&= -w - x \, \mathbf{i} - y\, \mathbf{j} - z\, \mathbf{k}
\end{align}

$p_1p_2$ と $p_2p_1$ の関係は共役複素数の関係になっていることが分かります。
従って

-\frac{(p_1p_2 + p_2p_1)}{2} = x_1x_2 + y_1y_2 + z_1z_2
\begin{align}
\frac{p_1p_2 - p_2p_1}{2} &= (y_1z_2 - z_1y_2) \, \mathbf{i}
+ (z_1x_2 - x_1z_2) \, \mathbf{j}
+ (x_1y_2 - y_1x_2) \, \mathbf{k}
\end{align}

上式を使ってベクトルの内積と外積をハミルトンの複素数に変換します。

ベクトルの内積

\vec{P_1}\vec{P_2}
 = x_1x_2 + y_1y_2 + z_1z_2

従ってベクトルの内積をハミルトンの複素数を使って表すと

\vec{P_1}\vec{P_2} = -\frac{(p_1p_2 + p_2p_1)}{2} 

ベクトルの外積

\vec{P_1} \times \vec{P_2} = \; <y_1z_1 - z_1y_2, \; z_1x_2 - x_1z_2, \; x_1y_2 - y_1x_2>

従ってベクトルの外積をハミルトンの複素数を使って表すと

\vec{P_1} \times \vec{P_2} = \frac{p_1p_2 - p_2p_1}{2}

上記を表にまとめます。

ベクトル → ハミルトンの複素数 変換表

以下にベクトルからハミルトンの複素数への変換をまとめておきます。
これを使って 式1 を複素数に変換し、 $qpq^{-1}$ の導出を目指します。

ベクトル ハミルトンの複素数 成分による値表示
$\vec{P}$ $p = x \, \mathbf{i} + y \, \mathbf{j} + z \, \mathbf{k}$ <x, y, z>
$k\vec{P}$ $kp$ <kx, ky, kz>
$\vec{P_1}\vec{P_2}$ $-\frac{(p_1p_2 + p_2p_1)}{2}$ $x_1x_2 + y_1y_2 + z_1z_2$
$\vec{P_1} \times \vec{P_2}$ $\frac{p_1p_2 - p_2p_1}{2}$ $ < y_1z_1 - z_1y_2, \, z_1x_2 - x_1z_2, \, x_1y_2 - y_1x_2 >$

「qpq-1 」の導出

一旦変換表をもとに式1のベクトル式を「ハミルトンの複素数」を用いて複素数に変換します。

\begin{align}
\vec{P}' &= \vec{P}\cos\theta + (\vec{A} \times \vec{P})\sin\theta + \vec{A}(\vec{A}\vec{P})(1 - \cos\theta) \\
  &= p\cos\theta + \frac{ap -pa}{2}\sin\theta - a\frac{ap + pa}{2}(1 - \cos\theta) \\

&\text{注: } \; \vec{A}(\vec{A}\vec{P}) = \vec{A}(k) = ka \quad \text{(kはベクトルの内積なので実数)}
\end{align}

つまりある頂点Pを任意の軸A(単位ベクトル)まわりに回転した頂点P'を表すベクトル式を複素数として表すことが出来ました。
イコールを用いていますが、あくまでも変換表によって置き換えただけです。

\begin{align}
\vec{P}' &= \vec{P}\cos\theta + (\vec{A} \times \vec{P})\sin\theta + \vec{A}(\vec{A}\vec{P})(1 - \cos\theta) \\
  &= p\cos\theta + \frac{ap -pa}{2}\sin\theta - a\frac{ap + pa}{2}(1 - \cos\theta)
\end{align}

ここからは変換した複素数をその演算規則に則ってまとめていきます。

\begin{align}
\vec{P}' &= \vec{P}\cos\theta + (\vec{A} \times \vec{P})\sin\theta) + \vec{A}(\vec{A}\vec{P})(1 - \cos\theta) \\
  &= p\cos\theta + \frac{ap -pa}{2}\sin\theta - a \frac{ap + pa}{2}(1 - \cos\theta) \\
  &= p\cos\theta + \frac{ap -pa}{2}\sin\theta - \frac{a(ap + pa)}{2}(1 - \cos\theta) \\
  &= p\cos\theta + \frac{ap -pa}{2}\sin\theta - \frac{(aa)p + apa}{2}(1 - \cos\theta)  \\
  &= p\cos\theta + \frac{ap -pa}{2}\sin\theta + \frac{|a|^2p - apa}{2}(1 - \cos\theta)  \\
  &= p\cos\theta + \frac{ap -pa}{2}\sin\theta + \frac{p - apa}{2}(1 - \cos\theta)  \\
  &= p\frac{1 + \cos\theta}{2} + \frac{ap -pa}{2}\sin\theta - \frac{apa}{2}(1 - \cos\theta) \\
\end{align}

ここで以下の三角関数の半角の公式と2倍角の公式を用いると


\text{半角の公式} \\
\sin^2 \frac{\theta}{2} = \frac{1 - \cos\theta}{2} \\
\cos^2 \frac{\theta}{2} = \frac{1 + \cos\theta}{2} \\
\text{2倍角の公式} \\
\sin\theta = 2\sin\frac{\theta}{2}\cos\frac{\theta}{2}

\begin{align}
\vec{P}' &= \vec{P}\cos\theta + (\vec{A} \times \vec{P})\sin\theta) + \vec{A}(\vec{A}\vec{P})(1 - \cos\theta) \\
  &= p\frac{1 + \cos\theta}{2} + \frac{ap -pa}{2}\sin\theta - \frac{apa}{2}(1 - \cos\theta) \\
  &= p\cos^2\frac{\theta}{2} + (ap - pa)\sin\frac{\theta}{2}\cos \frac{\theta}{2} -apa\sin^2\frac{\theta}{2} \\
  &= \biggl( p\cos^2\frac{\theta}{2} + ap\sin\frac{\theta}{2}\cos\frac{\theta}{2} \biggr) - \biggl(pa\sin\frac{\theta}{2}\cos\frac{\theta}{2} + apa\sin^2\frac{\theta}{2}\biggr) \\
  &= \Bigl(\cos\frac{\theta}{2} + a\sin\frac{\theta}{2}\Bigr) \Bigl(p\cos\frac{\theta}{2}\Bigr) - \Bigl(\cos\frac{\theta}{2} + a\sin\frac{\theta}{2}\Bigr) \Bigl(pa\sin\frac{\theta}{2}\Bigr) \\
  &= \Bigl(\cos\frac{\theta}{2} + a\sin\frac{\theta}{2}\Bigr) \Bigl(p\cos\frac{\theta}{2} - pa\sin\frac{\theta}{2}\Bigr) \\
  &= \Bigl(\cos\frac{\theta}{2} + a\sin\frac{\theta}{2} \Bigr) \; p \; \Bigl(\cos\frac{\theta}{2} - a\sin\frac{\theta}{2}\Bigr)
\end{align}

ここで、 $q = \cos\frac{\theta}{2} + a\sin\frac{\theta}{2}$ と置くと qハミルトンの複素数 であるから

q\bar{q} = \cos^2\frac{\theta}{2} + |a|^2\sin^2\frac{\theta}{2} = 1 \\
\therefore \bar{q} = q^{-1}

ゆえに

\begin{align}
\vec{P}' &= \vec{P}\cos\theta + (\vec{A} \times \vec{P})\sin\theta + \vec{A}(\vec{A}\vec{P})(1 - \cos\theta) \\
  &= \Bigl(\cos\frac{\theta}{2} + a\sin\frac{\theta}{2} \Bigr) \; p \; \Bigl(\cos\frac{\theta}{2} - a\sin\frac{\theta}{2}\Bigr) \\
  &= qpq^{-1}
\end{align}

このようにハミルトンは、「3つの独立した虚数に拡張した複素数(ハミルトンの複素数)」を用いることで、
3次元の頂点を回転するベクトル式を複素数に変換できることを示しました。

またこの導出過程の際に、 $q = \cos\frac{\theta}{2} + a\sin\frac{\theta}{2}$ と置き、
式1の回転を表すベクトル式は $qpq^{-1}$ と表すことが出来ました。

つまりこの q は、「ある頂点Pを任意の軸Aでθ回転させるためのハミルトンの複素数」と読むことが出来ます。

これを「クォータニオン」という言葉を使ってまとめ直します。

クォータニオンとは

  • ハミルトンによって拡張された虚数を用いて表される複素数cである
    $c = w + xi + yj +zk \quad \text{(w, x, y, zは実数)}$
  • ある任意の頂点を回転させることが出来るクォータニオンqは以下のように表せる
    $q = \cos\frac{\theta}{2} + a\sin\frac{\theta}{2}$

クォータニオンにおける回転について

クォータニオンにおける回転の視覚化はこちらで解説しています。

クォータニオンは「4つの軸(実軸、i軸, j軸, k軸)」を持つ空間」上で回転している
https://qiita.com/ysn551/items/cf98fd87acbce7335243

参考書籍

式1の導出過程は以下の参考書にて非常に詳しく説明されています。
ただクォータニオンの説明は $qpq^{-1}$ から 式1 が導き出されるという解説になっており、
$qpq^{-1}$ がどこからどう出てくるんだという辛さがあります。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
14