はじめに
回転行列の見かたについては、前回の記事にて
この記事ではベクトルの内積(投影長)を切り口に行列の積を組み合わせた軸変換とその見かた、そこから回転行列への展開までを書いた。
今回は回転行列の中身を再度。方向余弦を使って導く。
まずは、図的に理解しやすい平面の回転行列(2×2 行列)からはじめて、3次元の回転行列( 3×3 行列 ) へと話をすすめる。
ま、とりあえず3次元の回転行列までおさえておけば、大概なんとかなる
(オイラー角とかとか)。。
二次元(平面)での回転行列
まずは方向余弦を使った座標変換から
(2x2行列):二次元(平面)
使用する座標軸
共通の原点Oをもつ、二つの座標系 O-X0Y0 と O-X1Y1 を考える。
座標軸は右手系、角度はX軸をY軸に向かう方向に回転させる向きを正)とする。ここで
- X0軸、 Y0軸方向の単位ベクトルをそれぞれ \(\overrightarrow{i_0} \)、\(\overrightarrow{j_0} \)
- X1軸、 Y1軸方向の単位ベクトルをそれぞれ \(\overrightarrow{i_1} \)、\(\overrightarrow{j_1} \)
とする。
各軸の方向余弦
O-X0Y0から見たX1Y1 各軸の方向余弦
二つの座標系 O-X0Y0 と O-X1Y1 の各軸についてお互いのなす角を
- X1軸に対して、X0軸 、Y0軸がなす角を \( \alpha_0 \)、\( \beta_0 \)
- Y1軸に対してX0軸 、Y0軸がなす角を \( \alpha_1 \)、\( \beta_1 \)
(ここで、X0軸 ,Y0軸は直行していることから \( \alpha_n \)+\( \beta_n \) =\(\displaystyle\frac{\pi}{2} ~~~(n=0,1)\) )
とする。

また、このO-X0Y0 の座標軸の方向ベクトル \(\overrightarrow{i_0}=\left ( \begin{array}{c} 1\\ 0 \end{array} \right ), \overrightarrow{j_0}=\left ( \begin{array}{c} 0\\ 1 \end{array} \right ) \)を使えば、
\(\overrightarrow{i_1} \)、\(\overrightarrow{j_1} \) はそれぞれ、
\( \begin{align} \overrightarrow{i_1}&= \cos\alpha_0\cdot \overrightarrow{i_0} + \cos\beta_0\cdot \overrightarrow{j_0} =\cos\alpha_0\left ( \begin{array}{c} 1\\ 0 \end{array} \right ) +\cos\beta_0\left ( \begin{array}{c} 0\\ 1 \end{array} \right ) \\ &=\left ( \begin{array}{c} \cos\alpha_0\\ \cos\beta_0 \end{array} \right ) ・・・① \end{align}\) \(\\[4pt]\) \( \begin{align} \overrightarrow{j_1}&= \cos\alpha_1\cdot \overrightarrow{i_0} + \cos\beta_1\cdot \overrightarrow{j_0} =\cos\alpha_1\left ( \begin{array}{c} 1\\ 0 \end{array} \right ) +\cos\beta_1\left ( \begin{array}{c} 0\\ 1 \end{array} \right ) \\& =\left ( \begin{array}{c} \cos\alpha_1\\\cos\beta_1 \end{array} \right ) ・・・② \end{align}\)
この余弦(cos)を使った方向ベクトル表示は、方向余弦とよばれる
- X1軸の方向余弦: \( \overrightarrow{i_1}=\left ( \begin{array}{c} \cos\alpha_0\\\cos\beta_0 \end{array} \right ) \) \(\\[4pt]\)
- Y1軸の方向余弦: \(\overrightarrow{j_1}=\left ( \begin{array}{c} \cos\alpha_1\\\cos\beta_1 \end{array} \right ) \)
\(\overrightarrow{i_1}\)、\(\overrightarrow{j_1}\) は、定義から原点Oを始点にもち常に大きさ1のベクトル。角度は任意にとる事ができるのでベクトルの終点の軌跡は円を描く。
(円の公式に当てはめれば)以下も成立
cos2α0 + cos2β0 = 1、かつ、cos2α1 + cos2β1 = 1 ・・・③
O-X1Y1から見たX0Y0 各軸の方向余弦
また逆に X1軸&Y1軸 側から、X0軸&Y0軸を表すと、
- X0軸に対してX1軸 、Y1軸がなす角 :α0、α1
- Y0軸に対してX1軸 、Y1軸がなす角 :β0、β1
となるため、①②式同様に
\(\overrightarrow{i_0}= \cos\alpha_0\cdot \overrightarrow{i_1} + \cos\alpha_1\cdot \overrightarrow{j_1} =\left ( \begin{array}{c} \cos\alpha_0 \\ \cos\alpha_1 \end{array} \right ) ・・・④ \) \(\\[2pt]\) \(\overrightarrow{j_0}= \cos\beta_0 \cdot \overrightarrow{i_1} + \cos\beta_1\cdot \overrightarrow{j_1} =\left ( \begin{array}{c} \cos\beta_0 \\\cos\beta_1 \end{array} \right ) ・・・⑤ \)
が成立。つまり
- \(\left ( \begin{array}{c} \cos\alpha_0 \\ \cos\alpha_1 \end{array} \right ) \) : \(\overrightarrow{i_0} \)の方向余弦(X0軸)\(\\[2pt] \)
- \(\left ( \begin{array}{c} \cos\beta_0 \\\cos\beta_1 \end{array} \right ) \) : \(\overrightarrow{j_0} \)の方向余弦(Y0軸)
また \(\overrightarrow{i_0} \)、\(\overrightarrow{j_0} \)の大きさは、定義から常に1,よってその方向余弦も③と同じ性質をもつ
cos2α0 + cos2α1 = 1、 cos2β0 + cos2β1 = 1 ・・・⑥
行列化: 2x2行列の座標軸変換
さて、次に平面上の任意の点Aのベクトル OA を考える。
その成分は、それぞれの座標系にて
- O-X0Y0 上のOA成分: (ax0 ay0)
- O-X1Y1 上のOA成分: (ax1 ay1)
とする。
(同じ点Aを表す) OA を O-X0Y0 、O-X1Y1上でそれぞれ表すと、
OA = ax0・ i0 + ay0・ j0 ・・・⑦
OA = ax1・ i1 + ay1・ j1 ・・・⑧ である。
さて、⑦式 に i0、j0 (④⑤式)を代入する
OA = ax0・ i0 + ay0・ j0
= ax0 (cos α0・ i1 + cos α1・j1)
+ ay0 (cos β0・ i1 + cos β1・j1)
並び替えて
= (ax0・cos α0 + ay0・cos β0) i1
+ (ax0・cos α1 + ay0・cos β1) j1 ・・・⑨
同じOAを表している事から、⑧式=⑨式。

つまり、
ax1・ i1 + ay1・ j1
= (ax0・cos α0 + ay0・cos β0) i1
+ (ax0・cos α1 + ay0・cos β1) j1
\( \overrightarrow{i_1}≠0 、\overrightarrow{j_1}≠0 \) より両辺の係数は等しい。よって
ax1 = ax0・cos α0 + ay0・cos β0
ay1 = ax0・cos α1 + ay0・cos β1
である事がわかる。これを行列で表わして
\(\left ( \begin{array}{c} a_{x1} \\ a_{y1} \end{array} \right ) =\left ( \begin{array}{cc} \cos\alpha_0&\cos\beta_0 \\ \cos\alpha_ 1 & \cos\beta_1 \end{array} \right ) \left ( \begin{array}{c} a_{x0} \\ a_{y0} \end{array} \right ) ・・・⑩ \)
⑩式の 行列部分
\(R_\alpha =\left ( \begin{array}{cc} \cos\alpha_0&\cos\beta_0 \\ \cos\alpha_ 1 & \cos\beta_1 \end{array} \right ) ・・・⑪ \)
これが、二次元の座標変換 ( <- 回転行列)。
回転行列への展開:二次元(平面)
座標系の回転を示す回転行列
⑪式の角度をα0でまとめる。
座標軸が直行であること、また軸同士の関係から
- β0 = π/2 – α0
- α1 = π/2 + α0
- β1 = π/2 – β0 = α0
である。

これを使えばRα は、
\( \begin{align}
R_\alpha &=\left ( \begin{array}{cc} \cos\alpha_0&\cos\beta_0 \\ \cos\alpha_ 1 & \cos\beta_1 \end{array} \right ) = \left ( \begin{array}{cc} \cos\alpha_0&\cos ( \displaystyle\frac{\pi}{2}-\alpha_0 ) \\ \cos ( \displaystyle\frac{\pi}{2}+\alpha_0 ) & \cos\alpha_0 \end{array} \right ) \\[8pt]
&= \left ( \begin{array}{cc} \cos\alpha_0&\sin \alpha_0 \\ -\sin \alpha_0 & \cos\alpha_0 \end{array} \right ) ・・・⑫
\end{align} \)
これが 回転角 α0 の回転行列。つまり⑩式は
\(\left ( \begin{array}{c} a_{x1} \\ a_{y1} \end{array} \right ) = \left ( \begin{array}{cc} \cos\alpha_0&\sin \alpha_0 \\ -\sin \alpha_0 & \cos\alpha_0 \end{array} \right ) \left ( \begin{array}{c} a_{x0} \\ a_{y0} \end{array} \right ) ・・・⑬ \)
座標系上の点の回転を示す回転行列
⑬式は座標系を回転させる場合。
座標系は動かずに、点A (ax0 ay0) が原点中心に点B (a`x1 a`y1) へと回転した場合を考える。
視点を変える。
自身が座標軸と一緒に動くと、点Aは相対的に逆方向に動く。つまり、回転している座標系と同時に回転しながら点Aをみていると思えばよい。
(座標軸を+α0 回転と、点Aが-α0 の回転は同じ(視点が違うのみ))
つまり、点Aを α0 回転させる行列 R’α は、⑪式の Rα に -α0 を代入したものとなる。
\( R~’_\alpha = \left ( \begin{array}{cc} \cos(-\alpha_0 ) &\sin(-\alpha_0 ) \\ -\sin (-\alpha_0) & \cos(-\alpha_0) \end{array} \right ) = \left ( \begin{array}{cc} \cos\alpha_0 & – \sin\alpha_0 \\ \sin\alpha_0 & \cos\alpha_0 \end{array} \right ) ・・・⑭ \)
これが、同一座標系上で点を動かすときに使う回転行列である。
⑫式より、こっちの方がよく目にするかも。
これを使うと、 点Aが角度α0回転した点Bの座標は
\(\left ( \begin{array}{c} a’_{x1} \\ a’_{y1} \end{array} \right ) = \left ( \begin{array}{cc} \cos\alpha_0& -\sin \alpha_0 \\ \sin \alpha_0 & \cos\alpha_0 \end{array} \right ) \left ( \begin{array}{c} a_{x0} \\ a_{y0} \end{array} \right ) ・・・⑮\)
で求める事ができる。
二次元の座標変換はここまで、次のページから三次元の座標変換
三次元(空間)での回転行列
三次元(空間)の座標変換、回転行列に入る前に
まず、回転について。
平面上の回転(2次元)の場合、回転の中心は点である。当然傾きはない。
(回転の中心軸は平面に垂直であるという前提条件が含まれているとみてもよい。)
これは、座標軸平面上(XY平面上)で回転が行われる事を意味し(座標平面と回転の平面が一致する)、このおかげで二次元の回転では、回転角 α0の一つで簡単に回転を表現できる。
ところが、3次元上の回転ではそうはいかない。
というのも、二次元と同様に三次元上の実際の回転においても、一つの中心軸周りに一つの回転角で回転するにもかかわらず、その回転の中心軸が必ずしも座標平面と垂直にはならない事が原因。
これにより軸変換はともかく、回転行列にはちょいと細工が必要。
ちなみに、3次元上の回転は、以下の細工が主に使われる。
もちろん変換後の軸の方向余弦を使えば、三次元でも簡単に軸変換は表記可能。オイラー角の入り口となる。
とりあえず、今回は、この入り口までを以下にて。
というのも、平面(2次元の2x2行列 )と同じ流れで軸が一つ増えるだけ。
追記レベルの話。
方向余弦を使った座標変換(3x3行列):三次元(空間)
使用する座標軸
共通の原点Oをもつ二つの座標系 O-X0Y0Z0 と O-X1Y1Z1 を考える。
座標軸も同様に右手右ねじ系とする。
ここで、2次元に対してZ軸が加わるので、その方向の単位ベクトル kn(n=0,1) を追加して、
- X0軸、Y0軸、Z0軸方向の各単位ベクトル
:i0 、j0、k0 - X1軸、Y1軸、Z1軸方向の各単位ベクトル
:i1 、j1、k1
とする。
当然この各座標系の in、jn、kn (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
二次元と同様に、この角度を使って i1 、j1、k1 を余弦で表すと
\( \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} ・・・⑮ \)

この時方向余弦はそれぞれ、
\( \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 )} ・・・⑯ \)
i1 、j1、k1 は常に大きさ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
i0 、j0、k0 は
\( \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 = ax0・i0+ ay0・j0+ az0・k0 ・・・⑲
OA = ax1・i1+ ay1・j1+az1・k1 ・・・⑳
二次元と同じ式展開で⑲式の i0 、j0、k0 を⑰式で置き換える
OA=ax0・i0 + ay0・j0+ az0・k0
= ax0(cosα0・i1 + cosα1・j1 + cosα2・k1)
+ ay0(cosβ0・i1 + cosβ1・j1 + cosβ2・k1 )
+ az0(cosγ0・i1 + cosγ1・j1 + cosγ2・k1 )
並び替えて
= (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)k1 ・・・㉑
㉑式が⑳式と同一 (点Aが同一より)。
ax1・i1 + ay1・j1 + az1・k1
=(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)k1
よって
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行目の方向余弦の角度α0、β0、γ0は、定義より変換前のX0軸 、Y0軸 、Z0軸と変換後のX1軸のなす角となる(図4)。つまり、
\( \alpha_0=\psi \)、\( \beta_0=\displaystyle\frac{\pi}{2}-\psi \)、\( \gamma_0=\displaystyle\frac{\pi}{2} \)

同様に、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)

\(\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)

\(\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} \)
この㉔、㉕、㉖式が、オイラー角へ続く。