3次元の回転とクォータニオン その3


さて、Baker-Campbell-Hausdorffの公式によって、2つの行列 \(e^{X_A},\ e^{X_B}\) の積が、\(X_A,\ X_B\) および交換子だけを使って記述できることがわかりました。\(X_A,\ X_B\) を3次元回転の生成子 \(X,\ Y,\ Z\) を使って
$$
X_A = a_x X + a_y Y + a_z Z \equiv \vec{a} \cdot \vec{X}, \\
X_B = b_x X + b_y Y + b_z Z \equiv \vec{b} \cdot \vec{X}\,
$$
と書いたとします(生成子 \(X,\ Y,\ Z\) とそれぞれの係数をベクトルとして表記したのがポイントです)。Baker-Campbell-Hausdorffの公式と \(X,\ Y,\ Z\) の交換関係
$$ [X,\ Y] = Z,\ [Y,\ Z] = X,\ [Z,\ X] = Y $$
を使えば、 \(e^{X_C} = e^{X_A} e^{X_B}\) としたときの \(X_C\) は
$$ X_C = \{\vec{a} + \vec{b} + \frac{1}{2}(\vec{a} \times \vec{b}) + \frac{1}{12}\{\vec{a} \times (\vec{a} \times \vec{b}) + \vec{b} \times (\vec{b} \times \vec{a})\} + \cdots \} \cdot \vec{X}$$
とベクトル \(\vec{a},\ \vec{b}\) および外積を使って記述できることがわかります。ここで、クォータニオンの構成要素である \(i,\ j,\ k\) を使って
$$
i_A = a_x \frac{i}{2} + a_y \frac{j}{2} + a_z \frac{k}{2} \equiv \vec{a} \cdot \frac{\vec{i}}{2}, \\
i_B = b_x \frac{i}{2} + b_y \frac{j}{2} + b_z \frac{k}{2} \equiv \vec{b} \cdot \frac{\vec{i}}{2}\,
$$
とし、2つのクォータニオン \(q_A = e^{i_A},\ q_B = e^{i_B}\) とその積 \(q_A q_B\) 作ったとします(ここでも \(i,\ j,\ k\) をベクトル \(\vec{i}\) と表記しました)。このとき、\(\frac{i}{2},\ \frac{j}{2}, \frac{k}{2}\) が \(X,\ Y,\ Z\) と同じ交換関係を満たすことから、
$$
e^{i_A}e^{i_B} = e^{i_C},\\
i_C = \{\vec{a} + \vec{b} + \frac{1}{2}(\vec{a} \times \vec{b}) + \frac{1}{12}\{\vec{a} \times (\vec{a} \times \vec{b}) + \vec{b} \times (\vec{b} \times \vec{a})\} + \cdots \} \cdot \frac{\vec{i}}{2}
$$
と書けることが言えるわけです。つまり、回転行列の積とクォータニオンの積は同じふるまいをするので、回転行列の代わりにクォータニオンを使って積の計算をしてもいいわけです。

ところで、クォータニオンを \(e^{i_A}\) などと表現しても全然メリットがないですよね。\(e^{i_A}\) をクォータニオンと何気なく書いてきましたが、これはクォータニオンとクォータニオンのかけ算がまたクォータニオンになるように定義しておいたため、\(e^{i_A}\) をテイラー展開したものも、
$$ e^{i_A} = w + xi + yj + zk $$
の形式で書けるからです。そこで、回転をあらわすクォータニオンがちゃんとしたクォータニオンの形になるように計算してみましょう。

大きさが1のベクトル \(\vec{a}\) と実数 \(\theta\) を使って回転行列 \(R(\vec{a},\ \theta)\) を
$$ R(\vec{a},\ \theta) = e^{\theta\, \vec{a} \cdot \vec{X}},\ |\vec{a}| = 1 $$
と書くことにします。ここで \(\vec{a}\) は回転軸、\(\theta\) は回転角をあらわしているのですが、そのことは次のページでちゃんと説明します。これに対応したクォータニオン \(q(\vec{a},\ \theta)\) は、
\begin{eqnarray*}
q(\vec{a},\ \theta) & = & e^{\theta\, \vec{a} \cdot \frac{\vec{i}}{2}}
& = & 1 + \frac{\theta}{2} \vec{a} \cdot \vec{i} + \cdots + \frac{1}{n!}\left( \frac{\theta}{2} \right)^n (\vec{a} \cdot \vec{i})^n + \cdots
\end{eqnarray*}
とテイラー展開されます。さて、\((\vec{a} \cdot \vec{i})^n\) を計算しましょう。\(n\) = 2 のときは、
$$ (\vec{a} \cdot \vec{i})^2 =\ – \vec{a} \cdot \vec{a} + (\vec{a} \times \vec{a}) \cdot \vec{i} = -1 $$
となります。\(|\vec{a}| = 1\) としておいたことに注意してください。ですので、
$$
(\vec{a} \cdot \vec{i})^n = \left\{ \begin{split}
& (-1)^\frac{n}{2} & \ \ (n が偶数のとき)\\
& (-1)^\frac{n – 1}{2} \vec{a} \cdot \vec{i} & \ \ (n が奇数のとき) \end{split} \right.
$$
となります。\(q(\vec{a},\ \theta)\) のテイラー展開を \(\theta^{2n}\) の項と \(\theta^{2n + 1}\) の項にわけると、
\begin{eqnarray*}
q(\vec{a},\ \theta) & = & 1\ – \frac{1}{2!}\left( \frac{\theta}{2} \right)^2 + \cdots + \frac{(-1)^n}{(2n)!}\left( \frac{\theta}{2} \right)^{2n} + \cdots\\
& & \ + \frac{\theta}{2} \vec{a} \cdot \vec{i} + \cdots + \frac{(-1)^n}{(2n+1)!} \left( \frac{\theta}{2} \right)^{2n + 1} + \cdots \\
& = & \cos \frac{\theta}{2} + \sin \frac{\theta}{2} \vec{a} \cdot \vec{i}
\end{eqnarray*}
と非常に簡単な形にまとめることができました! ここでの勝因は、クォータニオンの構成要素 \(i,\ j,\ k\) を
$$
i^2 = j^2 = k^2 = -1, \\
ij + ji = jk + kj = ki + ik = 0
$$
となるように定義しておいたところにあります。なんともずるいように見えますが、\(X,\ Y,\ Z\) と同じ交換関係さえ満たしていればいいのです。

ついに \(\frac{\theta}{2}\) が出てきました。\(\theta\) ではなく \(\frac{\theta}{2}\) となるのは \(X \leftrightarrow \frac{i}{2}\) のように対応させたからに他ならないわけですが、\(ij = -ji = \frac{k}{2}\) のように定義していたら \([i,\ j] = k\) となるので \(\frac{\theta}{2}\) とはならなくて済むんじゃないかという疑問がわいてきます。しかし、その場合には代数的な矛盾が生じてしまうのです。例えば、\(ijk = \frac{kk}{2} = -\frac{1}{2}\) となるので、\(kijk = k(ijk) = -\frac{k}{2}\) が成り立つはずですが、計算の順番を変えてみると、\(kijk = (ki)(jk) = \frac{j}{2}\frac{i}{2} = -\frac{k}{8}\) と異なる結果となってしまいます。これでは使い物にならないので、\(ij = -ji = k\) のように定義する必要があったのです。つまり、\(\frac{\theta}{2}\) が出てくるのは必然だったと言えます。

ところで、\(\frac{\theta}{2}\) が出てくるということは、\(q(\vec{a},\ \theta)\) と \(q(\vec{a},\ \theta + 2\pi)\) が一致しないということです。
$$ q(\vec{a},\ \theta + 2\pi) = \cos \left(\frac{\theta}{2} + \pi \right) + \sin \left(\frac{\theta}{2} + \pi \right) \vec{a} \cdot \vec{i} = {-q(\vec{a},\ \theta)} $$
つまり、回転行列とクォータニオンには1対2の対応関係があり、1つの回転行列 \(R(\vec{a},\ \theta)\) は、\(q(\vec{a},\ \theta)\) と \(-q(\vec{a},\ \theta)\) の2つのクォータニオンに対応することになります。なんか混乱してしまいそうですが、このことがクォータニオンのかけ算のふるまいが回転行列と同じであるという関係を壊すことはありません。例えば、回転行列 \(R_A\) がクォータニオン \(q_A,\ {-q_A}\) に対応して、別の回転行列 \(R_B\) が \(q_B,\ {-q_B}\) に対応しているとします。この2つの回転行列を合成した \(R_C = R_B R_A\) に対応したクォータニオンは、\(q_C = q_B q_A\) とすれば、やはり \(q_C,\ {-q_C}\) に対応することになるからです。
$$
R_C = R_B R_A \leftrightarrow \left\{ \begin{split}
& q_B q_A & = q_C\\
& q_B (-q_A) & = {-q_C}\\
& (-q_B) q_A & = {-q_C}\\
& (-q_B) (-q_A) & = q_C
\end{split} \right.
$$
回転行列とクォータニオンに1対2の対応関係があることは後で回転の補間を考えるときにとても役に立つのですが、回転の合成を計算する上では、いちいちどちらのクォータニオンを使えばいいかという心配をする必要はありません。

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 *