POINT
- 回転行列は,ベクトルを原点周りに回転したベクトルに写す.
- 回転行列は図をかくと簡単に導出できる.
回転行列を簡単に導出する方法を紹介します.
この方法を知っておくと,プログラムで計算したいときにすぐ求められて便利です.
➡Pythonでの実装例:Pythonで回転行列 - Notes_JP
同じ方法で,「3次元回転行列」も計算できます.
➡回転行列(3次元) - Notes_JP
回転行列とは
回転行列とは,「ベクトル」を「原点周りに回転させたベクトル」に写す行列です.当然ですが,回転行列には,ベクトルの長さを変えないという特徴があります.ベクトルの長さを保つ変換には,「回転」の他に「反転」があります.
導出方法
詳しい方法は後に回し,ここでは2次元に限って説明します.行列
\begin{aligned}
M=
\begin{pmatrix}
m_{11} & m_{12} \\
m_{21} & m_{22}
\end{pmatrix}
\end{aligned}
を考えます.このとき,M=
\begin{pmatrix}
m_{11} & m_{12} \\
m_{21} & m_{22}
\end{pmatrix}
\end{aligned}
\begin{aligned}
\begin{pmatrix}
\textcolor{blue}{m_{11}} & m_{12} \\
\textcolor{blue}{m_{21}} & m_{22}
\end{pmatrix}
\begin{pmatrix}
1 \\
0
\end{pmatrix}
&=
\begin{pmatrix}
\textcolor{blue}{m_{11}} \\
\textcolor{blue}{m_{21}}
\end{pmatrix} \\
\begin{pmatrix}
m_{11} & \textcolor{red}{m_{12}} \\
m_{21} & \textcolor{red}{m_{22}}
\end{pmatrix}
\begin{pmatrix}
0 \\
1
\end{pmatrix}
&=
\begin{pmatrix}
\textcolor{red}{m_{12}} \\
\textcolor{red}{m_{22}}
\end{pmatrix}
\end{aligned}
です.\begin{pmatrix}
\textcolor{blue}{m_{11}} & m_{12} \\
\textcolor{blue}{m_{21}} & m_{22}
\end{pmatrix}
\begin{pmatrix}
1 \\
0
\end{pmatrix}
&=
\begin{pmatrix}
\textcolor{blue}{m_{11}} \\
\textcolor{blue}{m_{21}}
\end{pmatrix} \\
\begin{pmatrix}
m_{11} & \textcolor{red}{m_{12}} \\
m_{21} & \textcolor{red}{m_{22}}
\end{pmatrix}
\begin{pmatrix}
0 \\
1
\end{pmatrix}
&=
\begin{pmatrix}
\textcolor{red}{m_{12}} \\
\textcolor{red}{m_{22}}
\end{pmatrix}
\end{aligned}
つまり,一般の$2\times 2$行列に対して
行列の性質
\begin{aligned}
M
&=
\begin{pmatrix}
\textcolor{blue}{m_{11}} & \textcolor{red}{m_{12}} \\
\textcolor{blue}{m_{21}} & \textcolor{red}{m_{22}}
\end{pmatrix} \\
&=
\begin{pmatrix}
\textcolor{blue}{M
\begin{pmatrix}
1 \\
0
\end{pmatrix}},
\textcolor{red}{M
\begin{pmatrix}
0 \\
1
\end{pmatrix}}
\end{pmatrix} \\
\end{aligned}
M
&=
\begin{pmatrix}
\textcolor{blue}{m_{11}} & \textcolor{red}{m_{12}} \\
\textcolor{blue}{m_{21}} & \textcolor{red}{m_{22}}
\end{pmatrix} \\
&=
\begin{pmatrix}
\textcolor{blue}{M
\begin{pmatrix}
1 \\
0
\end{pmatrix}},
\textcolor{red}{M
\begin{pmatrix}
0 \\
1
\end{pmatrix}}
\end{pmatrix} \\
\end{aligned}
例えば,$M$が回転行列である場合,単位ベクトルを回転させたベクトルを意味する
\begin{aligned}
M
\begin{pmatrix}
1 \\
0
\end{pmatrix},\,
M
\begin{pmatrix}
0 \\
1
\end{pmatrix}
\end{aligned}
の「2つ」さえわかれば,回転行列の表式が決まります.そして,この単位ベクトルの回転は図を書けば簡単に求められます.M
\begin{pmatrix}
1 \\
0
\end{pmatrix},\,
M
\begin{pmatrix}
0 \\
1
\end{pmatrix}
\end{aligned}
以下で,実際に見てみましょう.
2次元回転行列
2次元回転行列
\begin{aligned}
\left(
\begin{array}{cc}
\textcolor{blue}{\cos\theta}&\textcolor{red}{-\sin\theta}\\
\textcolor{blue}{\sin\theta}&\textcolor{red}{\cos\theta}
\end{array}
\right)\end{aligned}
\left(
\begin{array}{cc}
\textcolor{blue}{\cos\theta}&\textcolor{red}{-\sin\theta}\\
\textcolor{blue}{\sin\theta}&\textcolor{red}{\cos\theta}
\end{array}
\right)\end{aligned}
3ステップに分けて導出します.
STEP
「$x$軸方向の単位ベクトル」を$\theta$回転させたベクトルを求める
上図(左)から簡単にわかるように,「$x$軸方向の単位ベクトル」を$\theta$回転させると
\begin{aligned}
\left(
\begin{array}{c}
1\\
0
\end{array}
\right)
%
\overset{\theta\text{回転}}{\longrightarrow}
%
\textcolor{blue}{
\left(
\begin{array}{c}
\cos\theta\\
\sin\theta
\end{array}
\right)
}
\end{aligned}
です.\left(
\begin{array}{c}
1\\
0
\end{array}
\right)
%
\overset{\theta\text{回転}}{\longrightarrow}
%
\textcolor{blue}{
\left(
\begin{array}{c}
\cos\theta\\
\sin\theta
\end{array}
\right)
}
\end{aligned}
STEP
「$y$軸方向の単位ベクトル」を$\theta$回転させたベクトルを求める
同様に上図(右)から,「$y$軸方向の単位ベクトル」を$\theta$回転させると,
\begin{aligned}
\left(
\begin{array}{c}
0\\
1
\end{array}
\right)
%
\overset{\theta\text{回転}}{\longrightarrow}
%
\textcolor{red}{
\left(
\begin{array}{c}
-\sin\theta\\
\cos\theta
\end{array}
\right)
}
\end{aligned}
です.\left(
\begin{array}{c}
0\\
1
\end{array}
\right)
%
\overset{\theta\text{回転}}{\longrightarrow}
%
\textcolor{red}{
\left(
\begin{array}{c}
-\sin\theta\\
\cos\theta
\end{array}
\right)
}
\end{aligned}
STEP
STEP1, 2で求めたベクトルを並べる
上で求めた2つのベクトルを並べた行列
\begin{aligned}
\left(
\begin{array}{cc}
\textcolor{blue}{\cos\theta}&\textcolor{red}{-\sin\theta}\\
\textcolor{blue}{\sin\theta}&\textcolor{red}{\cos\theta}
\end{array}
\right)\end{aligned}
が,求めたかった回転行列になっています.\left(
\begin{array}{cc}
\textcolor{blue}{\cos\theta}&\textcolor{red}{-\sin\theta}\\
\textcolor{blue}{\sin\theta}&\textcolor{red}{\cos\theta}
\end{array}
\right)\end{aligned}
導出方法(一般化)
すでに2次元の場合に示した性質を一般化します.行列と単位ベクトルの関係
行列は「単位ベクトルの変換先を並べたもの」である.つまり「$i$成分が$1$,それ以外の成分は$0$」の単位ベクトルを
\begin{aligned}
e_i=
\left(
\begin{array}{c}
0 \\
\vdots \\
1\\
\vdots \\
0
\end{array}
\right)
(i~~~
\end{aligned}
と書くとき,行列$M$はe_i=
\left(
\begin{array}{c}
0 \\
\vdots \\
1\\
\vdots \\
0
\end{array}
\right)
(i~~~
\end{aligned}
\begin{aligned}
M=(Me_1,...,Me_n)
\end{aligned}
と表せる.M=(Me_1,...,Me_n)
\end{aligned}
証明(方法1)
冒頭の方法の一般化です.わかりにくい場合は,$2\times2$行列で具体的に計算した,冒頭の証明と比べてみて下さい!ベクトル$Me_i$の$j$成分を,行列計算の定義どおりに計算すると
\begin{aligned}
(Me_i)_j
=\sum_{k=1}^n M_{jk}(e_i)_k
\end{aligned}
です($(e_i)_k$はベクトル$e_i$の$k$成分を表します).ここで,$(e_i)_k$は$k=i$のとき以外$0$なので,(Me_i)_j
=\sum_{k=1}^n M_{jk}(e_i)_k
\end{aligned}
\begin{aligned}
(Me_i)_j=M_{ji}
\end{aligned}
となります.//(Me_i)_j=M_{ji}
\end{aligned}
証明(方法2)
2次元の場合で考えます.$n$次元の場合も同様です.行列$M$をベクトル
\begin{aligned}
\boldsymbol{v}
&=
\begin{pmatrix}
v_{1} \\
v_{2}
\end{pmatrix}
=
v_{1}
\begin{pmatrix}
1 \\
0
\end{pmatrix}
+
v_{2}
\begin{pmatrix}
0 \\
1
\end{pmatrix} \\
&=v_{1}\boldsymbol{e}_{1} + v_{2}\boldsymbol{e}_{2}
\end{aligned}
に作用させると\boldsymbol{v}
&=
\begin{pmatrix}
v_{1} \\
v_{2}
\end{pmatrix}
=
v_{1}
\begin{pmatrix}
1 \\
0
\end{pmatrix}
+
v_{2}
\begin{pmatrix}
0 \\
1
\end{pmatrix} \\
&=v_{1}\boldsymbol{e}_{1} + v_{2}\boldsymbol{e}_{2}
\end{aligned}
\begin{aligned}
M\boldsymbol{v}
&=v_{1}\cdot M\boldsymbol{e}_{1} + v_{2}\cdot M\boldsymbol{e}_{2} \\
&=
(M\boldsymbol{e}_{1},M\boldsymbol{e}_{2})
\begin{pmatrix}
v_{1} \\
v_{2}
\end{pmatrix} \\
&=(M\boldsymbol{e}_{1},M\boldsymbol{e}_{2}) \boldsymbol{v}
\end{aligned}
となります.M\boldsymbol{v}
&=v_{1}\cdot M\boldsymbol{e}_{1} + v_{2}\cdot M\boldsymbol{e}_{2} \\
&=
(M\boldsymbol{e}_{1},M\boldsymbol{e}_{2})
\begin{pmatrix}
v_{1} \\
v_{2}
\end{pmatrix} \\
&=(M\boldsymbol{e}_{1},M\boldsymbol{e}_{2}) \boldsymbol{v}
\end{aligned}
つまり,$M=(M\boldsymbol{e}_{1},M\boldsymbol{e}_{2})$が成り立ちます.//
関連記事
この記事の図はTikZで作成しました.TikZ実例集〜2Dグラフ編 - Notes_JP