バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia3-backnumber/
はじめに
アフィン変換の続き。
アフィン変換の回転用のアフィン行列に回転行列が登場した。
この回転行列について。
登場人物
博識フクロウのフクさん

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
回転行列概要

今回は、回転行列って謎の行列の話か・・・。

まずはWikipediaから引用。
線型代数において、回転行列(かいてんぎょうれつ、英: rotation matrix)とは、ユークリッド空間内における原点中心の回転変換の表現行列のことである。
Wikiepdiaより(https://ja.wikipedia.org/wiki/%E5%9B%9E%E8%BB%A2%E8%A1%8C%E5%88%97)
2次元や3次元の回転は、幾何学、物理学、コンピュータグラフィックスの分野での計算に非常によく使われている。大半の応用で扱うのはこのふたつの場合だが、一般の次元でも回転行列を定義することができる。

もうユークリッド空間とかが意味不明なんだけど。

ユークリッド空間は定義としてはいろいろあるのだが、
ここでは、我々が普通に認識できる2次元平面や3次元空間を指していると思って良いだろう。
まぁ、4次元以上のユークリッド空間も定義上は存在はするけどね。

普通の2次元平面や3次元空間って思っておく!
動く点P

で、回転行列の具体的な話に突入するが、
ここでは2次元の回転行列について説明する。
3次元以上については割愛だ。

まぁ今回やるアフィン変換自体が2次元平面だもんねー。

まず、とある平面上に点\(P\)が居るとする。

出たな!
動く点P!

これを原点から見て回転角\(\theta\)分移動させる。
移動した先を点\(P\prime\)とする。
画像で示すと以下だ。


まぁ、ここは分かる。
回転を直交座標系で捉える

で、問題は、この点\(P\)と点\(P\prime\)はどのくらい動いたか。

え、回転角\(\theta\)分動いたんじゃないの?

それは極座標系の表現だな。
直交座標系の表現が欲しい。

そんなのわからんでしょ。

それを解決してくれるのが回転行列。

ほう?

まず、回転角\(\theta\)の移動を直交座標系に直すには
\(\sin\)、\(\cos\)が使える。
画像で示すと以下になる。


なんかわかるようなわからんよな・・・。

原点を中心にx軸、y軸ごと移動したイメージだな。
基本ベクトルで表現すると分かるかも。
関数\(\rm{R}\)が回転を示す関数とする。
x軸方向に1の基本ベクトルを回転角\(\theta\)分移動
\(
\rm{R}(\theta,
\begin{bmatrix}
1 \\
0
\end{bmatrix}
)=
\begin{bmatrix}
\cos\theta \\
\sin\theta
\end{bmatrix}
\)
y軸方向に1の基本ベクトルを回転角\(\theta\)分移動
\(
\rm{R}(\theta,
\begin{bmatrix}
0 \\
1
\end{bmatrix}
)=
\begin{bmatrix}
-\sin\theta \\
\cos\theta
\end{bmatrix}
\)

まぁ、確かに図の通りの結果な気はする。
回転行列

そして、これらを合体支えて行列にしたものが回転行列になる。
点\(P\)の座標を\(P_x,P_y\)
点\(P\prime\)の座標を\(P\prime_x,P\prime_y\)
とした場合、以下がその関係性になる。
\(
\begin{bmatrix}
P\prime_x \\
P\prime_y
\end{bmatrix}=
\begin{bmatrix}
\cos\theta & -\sin\theta \\
\sin\theta & \cos\theta
\end{bmatrix}
\begin{bmatrix}
P_x \\
P_y
\end{bmatrix}
\)

そっか。
x軸とy軸を一括にやるから、
行列にまとめてしまえば良いのか。

そうそう。
で、この座標の回転移動で使用される回転行列が
前回のアフィン変換の回転時のアフィン行列に組み込まれてるわけだ。

前回の回転時のアフィン行列を見ると確かにそうなってるね。


というわけで、回転行列の説明終了!
まとめ

まとめだよ。
- 回転行列概要をWikipediaより引用。
- 動く点Pで回転移動の雰囲気を察する。
- cos,sinを使って直交座標へ。
- 基本ベクトルの変化を元に回転のイメージを得る。
- x軸、y軸の回転を合わせて行列へ。
- これが回転行列。
バックナンバーはこちら。
コメント