クォータニオンのおさらい その1

このページではまだクォータニオンを知らない人のために、クォータニオンについて簡単にまとめまておきます。既に知っているという人も、このブログ内で使うクォータニオンの表記法を知るために軽く目を通しておいてください。


クォータニオンとは
クォータニオン \(q\) は4つの実数\((x,\ y,\ z,\ w)\)と、謎の数 \(i,\ j,\ k\) を使って表現されます。
$$ q = w + xi + yj + zk $$

クォータニオンの演算規則
1. 謎の数 \(i,\ j,\ k\) は虚数のように2乗すると\(-1\)になります。
$$ i^2 = j^2 = k^2 = -1 $$
2. 謎の数 \(i,\ j,\ k\) をかけあわせると次のようになります。
$$ ij = k,\ jk = i,\ ki = j $$
3. かけ算の順番を入れかえると負号が反転します。
$$ ij = -ji,\ jk = -kj,\ ki = -ik $$

ここでのポイントは、\((1,\ i,\ j,\ k)\) のかけ算が、また \((1,\ i,\ j,\ k)\) のいずれかになるということです。つまり、クォータニオンとクォータニオンのかけ算がまたクォータニオンになるということです。また、 \(i,\ j,\ k\) はかけ算の順番を入れかえると負号が反転するというのも重要なポイントです。

とてもシンプルで美しい演算規則ですね。これがクォータニオンの全てす。このシンプルな演算規則を使って3次元空間の回転をあらわすことができるのだから驚きです。

3次元空間の回転については次のページでおさらいすることにして、ここではまだピンとこない人のために、簡単な計算をしてみましょう。
2つのクォータニオンをそれぞれ
\[q_1 = w_1 + x_1i + y_1j + z_1k,\\
q_2 = w_2 + x_2i + y_2j + z_2k\, \]
とします。上の演算規則を使ってこの2つをかけあわせると、
\[ \begin{split}
q_1q_2 = (w_1w_2 – x_1x_2 – y_1y_2 – z_1z_2) &+ (w_2x_1 + w_1x_2 + y_1z_2 – z_1y_2)\,i\\
&+ (w_2y_1 + w_1y_2 + z_1x_2 – x_1z_2)\,j\\
&+ (w_2z_1 + w_1z_2 + x_1y_2 – y_1x_2)\,k
\end{split} \]
となるのがわかるでしょうか? さて、\(i,\ j,\ k\) の成分をよく見てみると、ベクトルの外積が含まれていますね。ここで、
\[q_1 = (w_1,\ \vec{v_1}),\\ q_2 = (w_2,\ \vec{v_2}),\\
\vec{v_1} = \left(\begin{array}{c}x_1\\y_1\\z_1\end{array}\right),\
\vec{v_2} = \left(\begin{array}{c}x_2\\y_2\\z_2\end{array}\right)\]
と表記することにすれば、
$$ q_1q_2 = (w_1w_2 – \vec{v_1} \cdot \vec{v_2},\ w_2 \vec{x_1} + w_1 \vec{x_2} + \vec{v_1} \times \vec{v_2}) $$
となります。

ところで、スカラーやベクトルという言葉の意味をご存知でしょうか? これらの言葉は座標系を回転したときにどのように値を変えるかを意味しています。すなわち、スカラーは座標系を回転しても値を変えないことを意味し、ベクトルは座標系の回転に対して、その空間上の点のように値を変えることを意味します。

さて、上のクォータニオンの表記 \(q_1 = (w_1,\ \vec{v_1}),\ q_2 = (w_2,\ \vec{v_2})\) で、\(w_1,\ w_2\) をスカラー、\(\vec{v_1},\ \vec{v_2}\) を3次元空間のベクトルだとしてみましょう。すると、\(q_1q_2\) もまたスカラーとベクトルで表記されているのがわかります。というのも、ベクトルとベクトルの内積はスカラーであり、スカラーとベクトルの積やベクトルとベクトルの外積はベクトルになるからです(※)。

というわけで、\(w_1\) を \(q_1\) のスカラー成分、\(\vec{v_1}\) を \(q_1\) のベクトル成分と呼ぶことにします。また、複素数と同じようにスカラー成分を実部、ベクトル成分を虚部という呼び方もします。

(※) ベクトルとベクトルの内積がスカラーになるというのは回転行列の定義のようなものです。行列 \(A\) が \(A^T A = I\ \) (\(I\) は単位行列) という関係を満たしていれば
$$ (A\vec{x}) \cdot (A\vec{y}) = \vec{x} \cdot (A^T A\vec{y}) = \vec{x}\cdot\vec{y} $$
となり、内積の値は行列 \(A\) による変換で変化しません。また、 \(A^T A = I\) という関係は行列 \(A\) を3つの列ベクトルで
$$ A = \left(\begin{array}{ccc} & & \\ \vec{a_1} & \vec{a_2} & \vec{a_3} \\ & & \end{array}\right) $$
と書いたときに、
$$ \vec{a_i} \cdot \vec{a_j} = \left\{\begin{split}1 &~~~~& (i = j のとき)\\ 0 & & (i \neq j のとき)\end{split}\right. $$
となることをあらわしているので、\(x,\ y,\ z\) 方向の単位ベクトルを回転して得られる \(\vec{a_1},\ \vec{a_2},\ \vec{a_3}\) が正規直交関係を維持していることを意味します。
ベクトルとベクトルの外積がベクトルになるというのも、回転によってベクトルの直交性が変化しないことから明らかと言えますが、式であらわすと
$$ (A\vec{x}) \times (A\vec{x}) = A(\vec{x} \times \vec{y}) $$
となることを意味していて、それほど自明には見えません。上の式を変形して
$$ A^T \{(A\vec{x}) \times (A\vec{y})\} = \vec{x} \times \vec{y} $$
となることを示せば良いわけですが、次の恒等式
$$ \vec{a_1} \cdot (\vec{a_2} \times \vec{a_3}) = \vec{a_2} \cdot (\vec{a_3} \times \vec{a_1}) = \vec{a_3} \cdot (\vec{a_1} \times \vec{a_2}) $$
を使えば、
$$ A^T \{(A\vec{x}) \times (A\vec{y})\} = \{\vec{a_1} \cdot (\vec{a_2} \times \vec{a_3})\} (\vec{x} \times \vec{y}) $$
となることが簡単な計算からわかります。\(\vec{a_1},\ \vec{a_2},\ \vec{a_3}\) は互いに直交して大きさが1のベクトルなので、\(\vec{a_2} \times \vec{a_3} = \pm\vec{a_1}\) となりますが、回転行列は回転角を \(0\) から徐々に増やすことで単位行列から連続的に変化して得られる行列なので、\(\vec{a_2} \times \vec{a_3}\) がどこかで突然 \(-\vec{a_1}\)になることはありえません。つまり、\(\vec{a_1} \cdot (\vec{a_2} \times \vec{a_3}) = 1\) となり、ベクトルとベクトルの外積がベクトルになることが言えます。

ちなみに、\(\vec{a_1} \cdot (\vec{a_2} \times \vec{a_3})\) は行列 \(A\) の行列式でもあるので、\(\mathrm{det}(A^TA) = (\mathrm{det}A)^2 = 1\) であることからも、\(\vec{a_1} \cdot (\vec{a_2} \times \vec{a_3}) = \pm 1\) が言えます。そして、やはり回転が単位行列と連続的につながっていることから、\(\vec{a_1} \cdot (\vec{a_2} \times \vec{a_3}) = 1\) が言えます。\(\vec{a_1} \cdot (\vec{a_2} \times \vec{a_3}) = -1\) となるのは座標軸を反転するような操作を含む場合です。

6 thoughts on “クォータニオン徹底解説

  • 2018/11/04 at 6:20 AM
    Permalink

    Baker-Campbell-Hausdorffの公式と X, Y, Z の交換関係
    [X, Y]=Z, [Y, Z]=X, [Z, X]=Y

    を使えば、 e^XC=e^XA*e^XB としたときの XC は
    XC={a⃗ +b⃗ +12(a⃗ ×b⃗ )+112{a⃗ ×(a⃗ ×b⃗ )+b⃗ ×(b⃗ ×a⃗ )}+⋯}⋅X
    これのどこに交換関係を利用しておられるのですか?

    Reply
  • 2018/11/04 at 6:22 AM
    Permalink

    9ページの最初の方に書かれている内容です

    Reply
  • 2018/11/05 at 11:47 AM
    Permalink

    コメントありがとうございます。
    $$ [X_A, X_B] = (\vec{a} \times \vec{b}) \cdot \vec{X} $$
    とするのに使っています。

    Reply
  • 2018/11/06 at 4:26 AM
    Permalink

    こんな質問にまで答えてくださりありがとうございます

    Reply
  • 2018/11/07 at 4:50 AM
    Permalink

    10ページの内容なのですがR(a→ 、 θ)にベクトルv→ をかけるとa→ を軸にθだけ回転した式が与えられるのであればRに対応したクォータニオンqで
    v→*qで回転したv→が求められそうだと思ったのですが、これでは値は求められないのでしょうか?

    Reply
    • 2018/11/07 at 1:18 PM
      Permalink

      9ページまでの説明で、回転行列同士の積とクォータニオン同士の積は同じ振舞いをすることがわかったわけですが、ベクトルに対する作用が同じということまでは言えません。そもそも、ベクトルにクォータニオンを作用させる方法も定義されていません。
      そこで、10ページ目では、回転行列の座標変換(これは回転行列同士の積だけで表される)を使ってベクトル(回転軸)が変換されることを示し、それに対応したクォータニオン同士の積から、クォータニオンでベクトルを回転させる方法を導いています。

      Reply

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Anti Spam Code *