複素数やクォータニオンと行列の加算と乗算は対応関係にある。ここでは実際に計算してこれらがどのような関係にあるのかを数学的に理解する。
# 背景
ゲーム(3DCG)において回転操作を行う場合、回転行列よりもクォータニオンを用いた回転の方が計算効率的に良い。クォータニオンによる回転は、複素数による回転の応用だ。複素数による回転を考える場合、複素数同士の乗算を行う。しかしなぜ複素数同士の乗算が回転を表すかわからなかった。計算の結果そうなることがわかっているだけの魔法の言葉のようなものかと思っていた。
しかし実は複素数同士の乗算が回転を表すという背景には、「行列と複素数の対応」にあった。クォータニオンによる回転操作を行う場合、クォータニオンの乗算だけでは回転操作の意味を理解することが全くできないが、それは回転行列をもとにした操作であるということだ。
もとの記事はこちら
複素数の乗算 ➡ 10.1.1 クォータニオン 基礎編
クォータニオンの乗算 ➡ 10.1.2 クォータニオン クォータニオンとは
#複素数と行列
複素数と行列がどのように対応しているのか、実際に式を解いてみてみよう。
乗算の表現
乗算において複素数と行列は対応している。複素数で乗算を表現すると
\begin{align}
q &= (a + ib)(x + iy) \\
&= ax + iay + ibx + i^2by \\
&= ax - by + i (ay + bx) \\
\end{align}
つまりこのような変換ということができる
x' = ax - by \\
y' = bx + ay
一方、行列で乗算を表現すると
\begin{align}
\begin{pmatrix}
x' \\
y'
\end{pmatrix}
&=
\begin{pmatrix}
a & -b \\
b & a \\
\end{pmatrix}
\begin{pmatrix}
x \\
y
\end{pmatrix}\\
&=
\begin{pmatrix}
ax - by \\
bx + ay \\
\end{pmatrix}
\end{align}
複素数の場合も行列の場合も、どちらも同じ結果を表していることがわかる。つまり乗算において複素数と行列は以下の関係が成り立つ。
(a + ib) \,↔︎
\begin{pmatrix}
a & -b \\
b & a \\
\end{pmatrix}
###加算の表現
加算においても複素数と行列は対応している。複素数で加算を表現すると
(a + ib) + (x + iy) = (a + x) + i(b + y)
x' = a + x \\
y' = b + y
行列で加算を表現すると
\begin{align}
\begin{pmatrix}
x' \\
y'
\end{pmatrix}
&=
\begin{pmatrix}
a \\
b \\
\end{pmatrix}
+
\begin{pmatrix}
x \\
y
\end{pmatrix}\\
&=
\begin{pmatrix}
a + x \\
b + y \\
\end{pmatrix}
\end{align}
複素数の場合も行列の場合も、どちらも同じ結果を表していることがわかる。
つまり加算において複素数と行列は以下の関係が成り立つ。
(a + ib) \,↔︎
\begin{pmatrix}
a \\
b \\
\end{pmatrix}
クォータニオンと行列
同様にクォータニオンと行列の対応をみてみよう。
乗算の表現
乗算において、クォータニオンと行列は対応している。クォータニオンで乗算を表すと
\begin{align}
q &= (a + ib + jc + kd) (w + ix + jy + kz) \\
&=(aw + axi + ayj + azk) + (ibw + i^2bx + ijby + ikbz) + (jwc + jicx + j^2cy + jkcz) + (kdw + kidx + kjdy + k^2dz) \\
&=(aw + axi + ayj + azk) + (ibw - bx + kby - jbz) + (jwc - kcx - cy + icz) + (kdw + jdx - idy - dz) \\
&= (aw - bx - cy - dz) \\
&+ (ax + bw + cz - dy)i \\
&+ (ay - bz + cw + dx)j \\
&+ (az + by - cx + dw)k
\end{align}
実部と虚部に注目すると
w’ = aw - bx - cy - dz \\
x’ = ax + bw + cz - dy \\
y’ = ay - bz + cw + dx \\
z’ = az + by - cx + dw \\
次に4x4行列での乗算をあらわすと
\begin{align}
\begin{pmatrix}
x' \\
y' \\
\end{pmatrix}
&=
\begin{pmatrix}
a & -b & -c & -d \\
b & a & -d & c \\
c & d & a & -b \\
d & -c & b & a \\
\end{pmatrix}
\begin{pmatrix}
w \\
x \\
y \\
z \\
\end{pmatrix}\\
&=
\begin{pmatrix}
aw - bx - cy - dz \\
ax + bw + cz - dy \\
ay - bz + cw + dx \\
az + by - cx + dw \\
\end{pmatrix}
\end{align}
これらは同じ結果を表している。つまり乗算においてクォータニオンと四元数は以下のように対応する
(a + ib + jc + kd) \,↔︎
\begin{pmatrix}
a & -b & -c & -d \\
b & a & -d & c \\
c & d & a & -b \\
d & -c & b & a \\
\end{pmatrix}
加算の表現
加算においてもクォターニオンと行列は対応している。クォターニオンで加算を表現すると
\begin{align}
q &= (a + ib + jc + kd) + (w + ix + jy + kz) \\
&= (a + w) + i(b + x) + j(c + y) + k(d + z) \\
\end{align}
実部と虚部を比較して
w' = a + w \\
x' = b + x \\
y' = c + y \\
z' = d + z \\
行列で加算を表現すると
\begin{align}
\begin{pmatrix}
w' \\
x' \\
y' \\
z' \\
\end{pmatrix}
&=
\begin{pmatrix}
a \\
b \\
c \\
d
\end{pmatrix}
+
\begin{pmatrix}
w \\
x \\
y \\
z
\end{pmatrix}\\
&=
\begin{pmatrix}
a + w \\
b + x \\
c + y \\
d + z \\
\end{pmatrix}
\end{align}
クォータニオンの場合も行列の場合も、どちらも同じ結果を表していることがわかる。つまり加算においてクォターニオンと行列は以下の関係が成り立つ。
(a + ib + jc + kd) \,↔︎
\begin{pmatrix}
a \\
b \\
c \\
d
\end{pmatrix}
参考
wikipedia 四元数
https://ja.wikipedia.org/wiki/%E5%9B%9B%E5%85%83%E6%95%B0