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

行列

はじめに

回転行列の見かたについては、前回の記事にて

この記事ではベクトルの内積(投影長)を切り口に行列の積を組み合わせた軸変換とその見かた、そこから回転行列への展開までを書いた。

今回は回転行列の中身を再度。方向余弦を使って導く。

まずは、図的に理解しやすい平面の回転行列(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)\) )

とする。

図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
図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 ・・・⑧ である。

さて、⑦式 に i0j0 (④⑤式)を代入する

OA = ax0 i0 + ay0 j0
= ax0 (cos α0 i1 + cos α1j1)
+ ay0 (cos β0 i1 + cos β1j1)

並び替えて

= (ax0・cos α0 + ay0・cos β0) i1
+ (ax0・cos α1 + ay0・cos β1) j1 ・・・⑨

同じOAを表している事から、⑧式=⑨式。

図2

つまり、

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 ) ・・・⑪ \)

これが、二次元の座標変換 ( <- 回転行列)。

再度、\(R_\alpha \)の各行ベクトルは、(回転後の) X1 Y1軸の方向を示す (= 方向余弦を並べたもの)。

つまり、行列をみれば回転後の軸方向がわかる。

\(R_\alpha =\left ( \begin{array}{cc} \color{red}{\cos\alpha_0} & \color{red}{cos\beta_0} \\ \color{blue}{\cos\alpha_ 1} & \color{blue}{\cos\beta_1} \end{array} \right ) \\[8pt] \)
-> X1軸方向が\( \left (\cos\alpha_0、\cos\beta_0 \right ) \)、Y1軸方向が\( \left (\cos\alpha_1、\cos\beta_1 \right ) \)

スポンサーリンク

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

座標系の回転を示す回転行列

⑪式の角度をα0でまとめる。

座標軸が直行であること、また軸同士の関係から

  • β0π/2 – α0
  • α1 = π/2 + α0
  • β1 = π/2 – β0 = α0

である。

画像に alt 属性が指定されていません。ファイル名: 2021-09-19_03h10_57.png

これを使えば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 ) ・・・⑮\)

で求める事ができる。

座標系を回転させた時の座標値の算出

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

-(同一座標系で)物体を回転させた時の座標値の算出

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

RαR`α は逆行列。
(回転する向きが変わるだけなので、当然ではあるが。。)

またRα直行行列 より、逆行列は転置行列を使っても簡単に求められる(逆行列=転置行列)。

(Rα)-1= (Rα)trR`α

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