行列 4). 2次元と3次元の座標変換と回転行列 オイラー角の入り口まで

行列

空間(三次元)上の座標変換、回転行列に入る前に

まず、回転について。

平面上の回転(2次元)の場合、回転の中心は点である。当然傾きはない。
(回転の中心軸は平面に垂直であるという前提条件が含まれているとみてもよい。)

これは、座標軸平面上(XY平面上)で回転が行われる事を意味し(座標平面と回転の平面が一致する)、このおかげで二次元の回転では、回転角 α0の一つで簡単に回転を表現できる。

ところが、3次元上の回転ではそうはいかない。

というのも、二次元と同様に三次元上の実際の回転においても、一つの中心軸周りに一つの回転角で回転するにもかかわらず、その回転の中心軸が必ずしも座標平面と垂直にはならない事が原因。

これにより軸変換はともかく、回転行列にはちょいと細工が必要。
ちなみに、3次元上の回転は、以下の細工が主に使われる。

  1. オイラー角 :
    3次元上の実回転を直接算出(中心軸まわりに回転)させるのではなく、”座標軸”を中心軸に使用し3回回転させる事により、回転後の座標を算出する変換(3つの回転角をもつ)。
    二次元の回転行列の発展版
  2. ロドリゲスの回転公式 :
    実際の回転の中心軸をベクトルの外積を使って行列に組み込み、一つの回転角にて回転移動を算出
  3. 四元数(クオータニオン:実軸と3つの虚数軸の4つを使う一つの4元数) :
    実際の回転の中心軸の方向ベクトルと回転角を用いた四元数と変換前の座標を示すベクトルを用いた四元数を準備し、その二つの関係式から、変換後の座標を算出
    (-> 四元数については行列からは、少し離れるので別途)

もちろん変換後の軸の方向余弦を使えば、三次元でも簡単に軸変換は表記可能。オイラー角の入り口となる。

とりあえず、今回は、この入り口までを以下にて。
というのも、平面(2次元の2x2行列 )と同じ流れで軸が一つ増えるだけ。

追記レベルの話。

スポンサーリンク

三次元:方向余弦を使った座標変換(3x3行列)

空間上(三次元)の二つの座標軸

共通の原点Oをもつ二つの座標系 O-X0Y0Z0 と O-X1Y1Z1 を考える。

座標軸も同様に右手右ねじ系とする。

ここで、2次元に対してZ軸が加わるので、その方向の単位ベクトル kn(n=0,1) を追加して、

  • X0軸、Y0軸、Z0軸方向の各単位ベクトル
    i0j0k0
  • X1軸、Y1軸、Z1軸方向の各単位ベクトル
    i1j1k1

とする。

当然この各座標系の ij (n=0,1)は互いに直行
(つまり正規直行ベクトル)

空間上(三次元)の方向余弦

\( \small{O-X_0Y_0Z_0} \) から見た \(\small{X_1Y_1Z_1} \) 各軸 の方向余弦

二つの座標系 O-X0Y0Z0 と O-X1Y1Z1 の各軸について 、お互いのなす角を

  • X1がX0軸 、Y0軸、Z0軸となす角
    α0、β0、γ0
  • Y1軸がX0軸 、Y0軸、Z0軸となす角
    α1、β1、γ1
  • Z1軸がX0軸 、Y0軸、Z0軸となす角
    α2、β2、γ2

二次元と同様に、この角度を使って i1j1k1 を余弦で表すと

\( \overrightarrow{i_1} = \cos\alpha_0 \cdot \overrightarrow{i_0}+\cos\beta_0 \cdot \overrightarrow{j_0} + \cos\gamma_0 \cdot \overrightarrow{k_0} \)
\( \overrightarrow{j_1} = \cos\alpha_1 \cdot \overrightarrow{i_0}+\cos\beta_1 \cdot \overrightarrow{j_0} + \cos\gamma_1 \cdot \overrightarrow{k_0} \)
\( \overrightarrow{k_1} = \cos\alpha_2 \cdot \overrightarrow{i_0}+\cos\beta_2 \cdot \overrightarrow{j_0} + \cos\gamma_2 \cdot \overrightarrow{k_0} ・・・⑮ \)

図3:X1軸がX0軸 、Y0軸、Z0軸となす角α0、β0、γ0

この時方向余弦はそれぞれ、

\( \overrightarrow{i_1} = \small{\left ( \begin{array}{c} \cos{\alpha_0} \\ \cos{\beta_0} \\ \cos{\gamma_0} \end{array} \right )}、 \overrightarrow{j_1} = \small{\left ( \begin{array}{c} \cos{\alpha_1} \\ \cos{\beta_1} \\ \cos{\gamma_1} \end{array} \right )}、 \overrightarrow{k_1} = \small{\left ( \begin{array}{c} \cos{\alpha_2} \\ \cos{\beta_2} \\ \cos{\gamma_2} \end{array} \right )} ・・・⑯ \)

i1j1k1 は常に大きさ1、角度を任意とすれば、その軌跡は”球”を描く。

つまり、これらの方向余弦は以下の性質をもつ。

cos2α0+cos2β0+cos2γ0 = 1
cos2α1+cos2β1+cos2γ1 = 1
cos2α2+cos2β2+cos2γ2 = 1

\( \small{O-X_1Y_1Z_1 } \) から見た \( \small{X_0Y_0Z_0 }\) 各軸 の方向余弦

逆に、\( O-X_1Y_1Z_1\) から見た \(X_0Y_0Z_0 \) 軸を表す。

二次元と同様に 角度を設定しなおせば、

  • X0が X1軸 、Y1軸、Z1軸となす角
    α0α1α2
  • Y0軸が X1軸 、Y1軸、Z1軸となす角
    :β0、β1、β2
  • Z0軸が X1軸 、Y1軸、Z1軸となす角
    :γ0、γ1、γ2

i0j0k0

\( \overrightarrow{i_0} = \cos\alpha_0 \cdot \overrightarrow{i_1}+\cos\alpha_1 \cdot \overrightarrow{j_1} + \cos\alpha_2 \cdot \overrightarrow{k_1} \)
\( \overrightarrow{j_0} = \cos\beta_0 \cdot \overrightarrow{i_1}+\cos\beta_1 \cdot \overrightarrow{j_1} + \cos\beta_2 \cdot \overrightarrow{k_1} \)
\( \overrightarrow{k_0} = \cos\gamma_0 \cdot \overrightarrow{i_1}+\cos\gamma_1 \cdot \overrightarrow{j_1} + \cos\gamma_2 \cdot \overrightarrow{k_1} ・・・⑰ \)

その方向余弦は、

\( \overrightarrow{i_0} = \small{\left ( \begin{array}{c} \cos{\alpha_0} \\ \cos{\alpha_1} \\ \cos{\alpha_2} \end{array} \right )}、 \overrightarrow{j_0} =\small{ \left ( \begin{array}{c} \cos{\beta_0} \\ \cos{\beta_1} \\ \cos{\beta_2} \end{array} \right )}、 \overrightarrow{k_0} = \small{\left ( \begin{array}{c} \cos{\gamma_0} \\ \cos{\gamma_1} \\ \cos{\gamma_2} \end{array} \right ) }・・・⑱ \)

同様に

cos2α0+cos2α1+cos2α2=1
cos2β0+cos2β1+cos2β2=1
cos2γ0+cos2γ1+cos2γ2=1

の性質ももつ。

スポンサーリンク

行列化 : 3x3行列の座標軸変換

以下、これも二次元と同様の流れ。

つまり、空間上の任意の点Aに対して原点Oを始点に持つベクトル OA を考える。

  • O-X0Y0Z0上のOA成分:(ax0 ay0 az0)
  • O-X1Y1Z1上のOA成分:(ax1 ay1 az1)

とする点Aは同じ、つまり

OA = ax0i0+ ay0j0+ az0k0 ・・・⑲
OA = ax1i1+ ay1j1+az1k1 ・・・⑳

二次元と同じ式展開で⑲式の i0j0k0 を⑰式で置き換える

OA=ax0i0 + ay0j0+ az0k0

= ax0(cosα0i1 + cosα1j1 + cosα21)
+ ay0(cosβ0i1 + cosβ1j1 + cosβ21 )
+ az0(cosγ0i1 + cosγ1j1 + cosγ21 )

並び替えて
= (ax0・cosα0+ay0・cosβ0+az0・cosγ0) i1
+(ax0・cosα1+ay0・cosβ1+az0・cosγ1) j1
+(ax0・cosα2+ay0・cosβ2+az0・cosγ2)1 ・・・㉑

㉑式が⑳式と同一 (点Aが同一より)。

ax1i1 + ay1j1 + az1k1
=(ax0・cosα0 + ay0・cosβ0 + az0・cosγ0) i1
+(ax0・cosα1 + ay0・cosβ1 + az0・cosγ1) j1
+(ax0・cosα2 + ay0・cosβ2 + az0・cosγ2)1

よって

ax1=ax0・cosα0+ay0・cosβ0+az0・cosγ0
ay1=ax0・cosα1+ay0・cosβ1+az0・cosγ1
az1=ax0・cosα2+ay0・cosβ2+az0・cosγ2

これを行列化

\(\small{\left ( \begin{array}{c} a_{x1} \\ a_{y1} \\ a_{z1} \end{array} \right ) }
= \small{\left ( \begin{array}{ccc}
\cos\alpha_0 & \cos\beta_0 & cos\gamma_0 \\
\cos\alpha_1 & \cos\beta_1 & cos\gamma_1 \\
\cos\alpha_2 & \cos\beta_2 & cos\gamma_2
\end{array} \right ) }
\small{\left ( \begin{array}{c}
a_{x0} \\ a_{y0} \\ a_{z0}
\end{array} \right ) }・・・㉒ \)

この行列部分

\(R =\small{ \left( \begin{array}{ccc}
\cos\alpha_0 & \cos\beta_0 & cos\gamma_0 \\
\cos\alpha_1 & \cos\beta_1 & cos\gamma_1 \\
\cos\alpha_2 & \cos\beta_2 & cos\gamma_2
\end{array} \right ) }・・・㉓ \)

3次元の座標変換を行う行列。

2次元と同様に変換後の各軸の方向余弦が行ベクトルで並ぶ。

スポンサーリンク

三次元:回転行列への展開

一つの座標軸を中心に座標系を回転させる時の回転行列

㉒式の行列 R の各行ベクトルは、上から順に変換後の X1->Y1->Z1 軸の方向余弦

Z軸廻りのψ回転

まず、Z軸廻りにψ回転させる。

1行目の方向余弦の角度α、β、γは、定義より変換前のX0軸 、Y0軸 、Z0軸と変換後のX1軸のなす角となる(図4)。つまり、

\( \alpha_0=\psi \)、\( \beta_0=\displaystyle\frac{\pi}{2}-\psi \)、\( \gamma_0=\displaystyle\frac{\pi}{2} \)

図4 Z軸まわりのψ回転

同様に、2行目の行ベクトル(Y1軸となす角)は

\( \alpha_1=\displaystyle\frac{\pi}{2}+\psi \)、\( \beta_1=\psi \)、\( \gamma_1=\displaystyle\frac{\pi}{2} \)

3行目の行ベクトル (Z1軸となす角)は、

\( \alpha_2=\displaystyle\frac{\pi}{2} \)、\( \beta_2=\displaystyle\frac{\pi}{2} \)、\( \gamma_2=0 \)

この時の回転行列を Rψ とすれば

\(\begin{align}
R_\psi &=\small{ \left( \begin{array}{ccc}
\cos\alpha_0 & \cos\beta_0 & cos\gamma_0 \\
\cos\alpha_1 & \cos\beta_1 & cos\gamma_1 \\
\cos\alpha_2 & \cos\beta_2 & cos\gamma_2
\end{array} \right ) }
=\small{ \left( \begin{array}{ccc}
\cos\psi & \cos(\displaystyle\frac{\pi}{2}-\psi ) & cos\displaystyle\frac{\pi}{2} \\
\cos(\displaystyle\frac{\pi}{2}+\psi) & \cos\psi & cos\displaystyle\frac{\pi}{2} \\
\cos\displaystyle\frac{\pi}{2} & \cos\displaystyle\frac{\pi}{2} & cos 0
\end{array} \right )} \\[8pt]
&=\small{ \left( \begin{array}{ccc}
\cos\psi & \sin\psi & 0 \\
-\sin\psi & \cos\psi & 0 \\
0 & 0 & 1
\end{array} \right )} ・・・㉔
\end{align} \)

そのまま続いてY軸廻り、X軸廻り。

Y軸廻りのθ回転

Y軸廻りにθ回転させる回転行列RθRψと同様に算出すれば(図5)

図5 Y軸まわりのθ回転

\(\begin{align}
R_\theta &= \small{\left( \begin{array}{ccc}
\cos\alpha_0 & \cos\beta_0 & cos\gamma_0 \\
\cos\alpha_1 & \cos\beta_1 & cos\gamma_1 \\
\cos\alpha_2 & \cos\beta_2 & cos\gamma_2
\end{array} \right ) }
= \small{\left( \begin{array}{ccc}
\cos\theta & cos\displaystyle\frac{\pi}{2} & \cos(\displaystyle\frac{\pi}{2}+\theta )\\
\cos\displaystyle\frac{\pi}{2} & cos 0 & \cos\displaystyle\frac{\pi}{2}\\
\cos(\displaystyle\frac{\pi}{2}- \theta) & cos\displaystyle\frac{\pi}{2} & \cos\theta
\end{array} \right ) }\\[8pt]
&=\small{ \left( \begin{array}{ccc}
\cos\theta & 0 & -\sin\theta \\
0 & 1 & 0 \\
\sin\theta & 0 & \cos\theta
\end{array} \right )} ・・・㉕
\end{align} \)

X軸廻りのφ回転

X軸廻りにφ回転させる回転行列RφRψ と同様に求めれば(図6)

図6 X軸まわりのφ回転

\(\begin{align}
R_\phi &= \small{\left( \begin{array}{ccc}
\cos\alpha_0 & \cos\beta_0 & cos\gamma_0 \\
\cos\alpha_1 & \cos\beta_1 & cos\gamma_1 \\
\cos\alpha_2 & \cos\beta_2 & cos\gamma_2
\end{array} \right ) }
= \small{\left( \begin{array}{ccc}
cos 0 &\cos\displaystyle\frac{\pi}{2} & \cos\displaystyle\frac{\pi}{2}\\
cos\displaystyle\frac{\pi}{2} &\cos\phi & \cos(\displaystyle\frac{\pi}{2}-\phi )\\
cos\displaystyle\frac{\pi}{2} &\cos(\displaystyle\frac{\pi}{2}+\phi) & \cos\phi
\end{array} \right )} \\[8pt]
&= \small{\left( \begin{array}{ccc}
1 & 0 & 0 \\
0 &\cos\phi & \sin\phi \\
0 & -\sin\phi & \cos\phi
\end{array} \right )} ・・・㉖
\end{align} \)

この㉔、㉕、㉖式が、オイラー角へ続く。

タイトルとURLをコピーしました