回転行列(2次元・3次元)の導出〜超簡単な方法

f:id:IsThisAPen:20180128163145j:plain:w400

POINT

  • 回転行列(2次元・3次元)を簡単に導出する方法の紹介.
  • ポイントは「行列は単位ベクトルの変換先を並べたものである」こと.
  • 同じ方法で3次元回転行列を始め,どんな行列も導出できる.

「回転行列」とは,ベクトルに作用させると「回転したベクトル」を返す行列です(上図).この「回転行列」は,公式を覚えることなく簡単に求めることができます.この記事で紹介する方法には,多くのメリットがあります!:

  • 前提とする知識は,行列の計算方法だけ
  • 2次元なら暗算で導出できる
  • 3次元回転行列を始めとして,どんな変換行列も求めることができる

導出:2次元回転行列

3ステップに分けて導出します.
f:id:IsThisAPen:20180128164132j:plain
単位ベクトルの回転 (図はTex(TikZ)で作成:TikZ実例集〜TeXで図を描く方法 - Notes_JP)

  • Step1:「$x$軸方向の単位ベクトル」を$\theta$回転させたベクトルを求める
    上図(左)から簡単にわかるように,「$x$軸方向の単位ベクトル」を$\theta$回転させると
    \begin{align}
    \left(
    \begin{array}{c}
    1\\
    0
    \end{array}
    \right)
    %
    \overset{\theta\text{回転}}{\longrightarrow}
    %
    \color{blue}{
    \left(
    \begin{array}{c}
    \cos\theta\\
    \sin\theta
    \end{array}
    \right)
    }
    \end{align}
    です.
  • Step2:「$y$軸方向の単位ベクトル」を$\theta$回転させたベクトルを求める
    同様に上図(右)から,「$y$軸方向の単位ベクトル」を$\theta$回転させると,
    \begin{align}
    \left(
    \begin{array}{c}
    0\\
    1
    \end{array}
    \right)
    %
    \overset{\theta\text{回転}}{\longrightarrow}
    %
    \color{red}{
    \left(
    \begin{array}{c}
    -\sin\theta\\
    \cos\theta
    \end{array}
    \right)
    }
    \end{align}
    です.
  • Step3:Step1, 2で求めたベクトルを並べる
    上で求めた2つのベクトルを並べた行列が,求めたかった回転行列になっています.簡単ですね.

    2次元回転行列
    \begin{align} \left( \begin{array}{cc} \color{blue}{\cos\theta}&\color{red}{-\sin\theta}\\ \color{blue}{\sin\theta}&\color{red}{\cos\theta} \end{array} \right) \end{align}


性質:行列と単位ベクトルの関係

上の方法で回転行列を求めることができた理由を解説します.使った性質は一つだけです!この性質を使えば、同じ方法で3次元回転行列も導く事ができます!

次の性質から,「行列とは,単位行列の変換先を順に並べたもの」と言ます.これを応用すれば,3次元回転行列も導くことができます.

行列と単位ベクトルの関係
行列は「単位ベクトルの変換先を並べたもの」である.つまり「$i$成分が$1$,それ以外の成分は$0$」の単位ベクトルを \begin{align} e_i= \left( \begin{array}{c} 0 \\ \vdots \\ 1\\ \vdots \\ 0 \end{array} \right) (i~~~ \end{align} と書くとき,行列$M$は \begin{align} M=(Me_1,...,Me_n) \end{align} と表せる.

証明
ベクトル$Me_i$の$j$成分を,行列計算の定義どおりに計算すると
\begin{align}
(Me_i)_j
=\sum_{k=1}^n M_{jk}(e_i)_k
\end{align}
です($(e_i)_k$はベクトル$e_i$の$k$成分を表します).ここで,$(e_i)_k$は$k=i$のとき以外$0$なので,
\begin{align}
(Me_i)_j=M_{ji}
\end{align}
となります.//

わかりにくい場合は,$2\times2$行列で具体的に計算して上の証明と比べてみて下さい!

導出:3次元回転行列

3次元回転行列も2次元の場合と全く同じ方法で導出できることを見てみます.

座標軸周りの回転

$z$軸周りに$\theta$回転させる場合を考えると,単位ベクトルはそれぞれ以下のように変換されます:
\begin{align}
\left(
\begin{array}{c}
1\\
0\\
0
\end{array}
\right)
%
&\overset{\theta\text{回転}}{\longrightarrow}
%
\color{blue}{
\left(
\begin{array}{c}
\cos\theta\\
\sin\theta\\
0
\end{array}
\right)
},\\
%%%%%%%%
\left(
\begin{array}{c}
0\\
1\\
0
\end{array}
\right)
%
&\overset{\theta\text{回転}}{\longrightarrow}
%
\color{red}{
\left(
\begin{array}{c}
-\sin\theta\\
\cos\theta\\
0
\end{array}
\right)
},\\
%%%%%%%%
\left(
\begin{array}{c}
0\\
0\\
1
\end{array}
\right)
%
&\overset{\theta\text{回転}}{\longrightarrow}
%
\color{green}{
\left(
\begin{array}{c}
0\\
0\\
1
\end{array}
\right)
}.
\end{align}

したがって,$z$軸周りに$\theta$回転させる3次元回転行列がわかります:
\begin{align}
\left(
\begin{array}{ccc}
\color{blue}{\cos\theta}&\color{red}{-\sin\theta}&\color{green}{0}\\
\color{blue}{\sin\theta}&\color{red}{\cos\theta}&\color{green}{0}\\
\color{blue}{0}&\color{red}{0}&\color{green}{1}
\end{array}
\right)
\end{align}

$x$軸,$y$軸周りの回転行列も同じ方法で導出できます.

3次元回転行列($x,y,z$軸周り)
$\displaystyle \left( \begin{array}{ccc} 1&0&0\\ 0&\cos\theta&-\sin\theta\\ 0&\sin\theta&\cos\theta \end{array} \right),\quad$$\displaystyle \left( \begin{array}{ccc} \cos\theta&0&\sin\theta\\ 0&1&0\\ -\sin\theta&0&\cos\theta \end{array} \right),\quad$$\displaystyle \left( \begin{array}{ccc} \cos\theta&-\sin\theta&0\\ \sin\theta&\cos\theta&0\\ 0&0&1 \end{array} \right).\quad$

ロドリゲスの回転公式(任意軸周りの回転)

任意の軸周りの回転行列(ロドリゲスの回転公式)を導いてみましょう.

f:id:IsThisAPen:20180606201401j:plain
任意軸周りの回転 (図はTex(TikZ)で作成:TikZ実例集〜TeXで図を描く方法 - Notes_JP)
上図からベクトル$\boldsymbol{r}$を$\boldsymbol{n}$の周りに$\theta$回転させたベクトルは
\begin{align}
\boldsymbol{r}^\prime
&=(\boldsymbol{r}\cdot\boldsymbol{n})\boldsymbol{n}
+\left[\boldsymbol{r}-(\boldsymbol{r}\cdot\boldsymbol{n})\boldsymbol{n}\right]\cos\theta
+\left(\boldsymbol{n}\times\boldsymbol{r}\right)\sin\theta\\
&=\boldsymbol{r}\cos\theta
+\boldsymbol{n}(\boldsymbol{r}\cdot\boldsymbol{n})\left(1-\cos\theta\right)
+\left(\boldsymbol{n}\times\boldsymbol{r}\right)\sin\theta
\end{align}
となります.

ここで$\boldsymbol{r}=\boldsymbol{e}_x,\boldsymbol{e}_y,\boldsymbol{e}_z$とすれば,単位ベクトルを回転させたベクトルを求めることができます.各項は
\begin{align}
(\boldsymbol{e}_i\cdot\boldsymbol{n})\boldsymbol{n}
&=n_i\boldsymbol{n}\\
\left(\boldsymbol{n}\times\boldsymbol{e}_l\right)_i
&=\sum_{j,k=1}^3\epsilon_{ijk}n_j\left(\boldsymbol{e}_l\right)_k
=\sum_{j=1}^3\epsilon_{ijl}n_j
\end{align}
を用いて計算することができ,$\boldsymbol{r}=\boldsymbol{e}_l$を回転させたベクトルの$i$成分は
\begin{align}
&\left[\boldsymbol{e}_l\cos\theta
+\boldsymbol{n}n_l\left(1-\cos\theta\right)
+\left(\boldsymbol{n}\times\boldsymbol{e}_l\right)\sin\theta
\right]_i \\
&=\delta_{il}\cos\theta
+n_in_l\left(1-\cos\theta\right)
+\sum_{j=1}^3\epsilon_{ijl}n_j \sin\theta
\end{align}
となります.したがって,


\begin{align}
\left(
\begin{array}{c}
1\\
0\\
0
\end{array}
\right)
%
&\overset{\theta\text{回転}}{\longrightarrow}
%
\color{blue}{
\left(
\begin{array}{c}
\cos\theta+n_x^2(1-\cos\theta)\\
n_x n_y(1-\cos\theta)+n_z\sin\theta\\
n_z n_x(1-\cos\theta)-n_y\sin\theta
\end{array}
\right)
}\\
%%%%%%%%%%%%%%
\left(
\begin{array}{c}
0\\
1\\
0
\end{array}
\right)
%
&\overset{\theta\text{回転}}{\longrightarrow}
%
\color{red}{
\left(
\begin{array}{c}
n_x n_y(1-\cos\theta)-n_z\sin\theta\\\
\cos\theta+n_y^2(1-\cos\theta)\\
n_y n_z(1-\cos\theta)+n_x\sin\theta
\end{array}
\right)
}\\
%%%%%%%%%%%%%%
\left(
\begin{array}{c}
0\\
0\\
1
\end{array}
\right)
%
&\overset{\theta\text{回転}}{\longrightarrow}
%
\color{green}{
\left(
\begin{array}{c}
n_z n_x(1-\cos\theta)+n_y\sin\theta\\
n_y n_z(1-\cos\theta)-n_x\sin\theta\\
\cos\theta+n_z^2(1-\cos\theta)
\end{array}
\right)
}.
\end{align}

こうして求められる行列が「ロドリゲスの回転公式」です.

ロドリゲスの回転公式
\begin{align} \left( \begin{array}{ccc} \color{blue}{ \cos\theta+n_x^2(1-\cos\theta)}&\color{red}{n_x n_y(1-\cos\theta)-n_z\sin\theta}&\color{green}{n_z n_x(1-\cos\theta)+n_y\sin\theta}\\ \color{blue}{ n_x n_y(1-\cos\theta)+n_z\sin\theta}&\color{red}{ \cos\theta+n_y^2(1-\cos\theta)}&\color{green}{n_y n_z(1-\cos\theta)-n_x\sin\theta}\\ \color{blue}{ n_z n_x(1-\cos\theta)-n_y\sin\theta}&\color{red}{ n_y n_z(1-\cos\theta)+n_x\sin\theta}&\color{green}{\cos\theta+n_z^2(1-\cos\theta)} \end{array} \right) \end{align}

一般化:等長変換

回転行列は,距離を保つ変換(等長変換)へと一般化されます.次の記事では,

  • ユークリッド空間における等長変換が「回転」と「反転」で表されること
  • ミンコフスキー空間での等長変換(Lorentz変換)

について議論しています.
www.mynote-jp.com

応用例:他分野への応用

この記事で紹介した『行列は「単位ベクトルの変換先を並べたもの」』という性質を使った導出法は,広い分野に応用が効きます.例えば,以下の記事ではこの性質を使っています:

  1. 線形代数(行列表示, 対角化, Jordan標準形, etc.).
  2. 物理

まとめ

今回紹介した方法なら,$\theta$回転の公式を覚えて,$\theta$に具体的な値を代入して・・・なんてしなくても,例えば$30^\circ$や$90^\circ$で上の考え方を使えば,その都度,暗算で回転行列を導出することができます.毎回導出するのであれば,時計回りに回転させた公式だっけ?反時計回りに回転させた公式だっけ?などと悩まなくて済みますし,どっち回りの公式でも簡単に導けます.

その上,この導出法が使えるのは2次元回転行列だけではありません.単位ベクトルの変換さえわかってしまえば,3次元の回転行列を始め,どんな行列でも求めることができるのです.

プライバシーポリシー

お問い合わせ