機械学習基礎理論独習

誤りがあればご指摘いただけると幸いです。数式が整うまで少し時間かかります。リンクフリーです。

勉強ログです。リンクフリーです
目次へ戻る

直交座標系の変換

直交座標系の変換


正規直交基底 {\bf i}',{\bf j}',{\bf k}' を軸とする座標系上の点の位置 \bf p を、
この座標系と原点を共有する別の正規直交基底 {\bf i},{\bf j},{\bf k} を軸とする座標系に移す変換は、回転の変換となります。
それぞれの座標系における \bf p の座標値を、(x,y,z)(x',y',z') とすると、以下が成り立ちます。

\begin{eqnarray}
&&x{\bf i}+y{\bf j}+z{\bf k}=x'{\bf i}'+y'{\bf j}'+z'{\bf k}'\\
&&\Rightarrow 
\begin{pmatrix}{\bf i} & {\bf j} & {\bf k}\end{pmatrix}
\begin{pmatrix}x \\ y \\ z\end{pmatrix}
=
\begin{pmatrix}{\bf i}' & {\bf j}' & {\bf k}'\end{pmatrix}
\begin{pmatrix}x' \\ y' \\ z'\end{pmatrix}\\
&&\Rightarrow 
\begin{pmatrix}x \\ y \\ z\end{pmatrix}
=
\begin{pmatrix}{\bf i} & {\bf j} & {\bf k}\end{pmatrix}^{-1}
\begin{pmatrix}{\bf i}' & {\bf j}' & {\bf k}'\end{pmatrix}
\begin{pmatrix}x' \\ y' \\ z'\end{pmatrix}\\
&&\Rightarrow 
\begin{pmatrix}x \\ y \\ z\end{pmatrix}
=
\begin{pmatrix}{\bf i} & {\bf j} & {\bf k}\end{pmatrix}^\top
\begin{pmatrix}{\bf i}' & {\bf j}' & {\bf k}'\end{pmatrix}
\begin{pmatrix}x' \\ y' \\ z'\end{pmatrix}\\
&&\Rightarrow 
\begin{pmatrix}x \\ y \\ z\end{pmatrix}
=
\begin{pmatrix}{\bf i}^\top \\ {\bf j}^\top \\ {\bf k}^\top\end{pmatrix}
\begin{pmatrix}{\bf i}' & {\bf j}' & {\bf k}'\end{pmatrix}
\begin{pmatrix}x' \\ y' \\ z'\end{pmatrix}\\
&&\Rightarrow 
\begin{pmatrix}x \\ y \\ z\end{pmatrix}
=
\begin{pmatrix}
{\bf i}^\top{\bf i}'  & {\bf i}^\top{\bf j}' & {\bf i}^\top{\bf k}'\\
{\bf j}^\top{\bf i}'  & {\bf j}^\top{\bf j}' & {\bf j}^\top{\bf k}' \\
{\bf k}^\top{\bf i}' & {\bf k}^\top{\bf j}' & {\bf k}^\top{\bf k}' \\
\end{pmatrix}
\begin{pmatrix}x' \\ y' \\ z'\end{pmatrix}\tag{1}
\end{eqnarray}

(1) より求める回転行列 {\bf M} は以下のようになります。
\begin{pmatrix}{\bf i} & {\bf j} & {\bf k}\end{pmatrix}{\bf i},{\bf j},{\bf k} が正規直交基底なので、直交行列です。
※直交行列の逆行列は転置行列であることを用いて、上の式変形をしています。


\begin{eqnarray}
{\bf M}=\begin{pmatrix}
{\bf i}^\top{\bf i}'  & {\bf i}^\top{\bf j}' & {\bf i}^\top{\bf k}'\\
{\bf j}^\top{\bf i}'  & {\bf j}^\top{\bf j}' & {\bf j}^\top{\bf k}' \\
{\bf k}^\top{\bf i}' & {\bf k}^\top{\bf j}' & {\bf k}^\top{\bf k}' \\
\end{pmatrix}\tag{2}
\end{eqnarray}

i,j,kが軸ベクトルの場合

{\bf i},{\bf j},{\bf k} がそれぞれ x,y,z の各軸の軸ベクトルすなわち {\bf i}=(1,0,0),{\bf j}=(0,1,0),{\bf k}=(0,0,1) の時、回転行列は以下のように簡単になります。

\begin{eqnarray}
{\bf M}
&=&
\begin{pmatrix}{\bf i}^\top \\ {\bf j}^\top \\ {\bf k}^\top\end{pmatrix}
\begin{pmatrix}{\bf i}' & {\bf j}' & {\bf k}'\end{pmatrix}\\
&=&
\begin{pmatrix}1 & 0 & 0 \\ 0 & 1 & 0\\ 0 & 0 & 1\end{pmatrix}
\begin{pmatrix}{\bf i}' & {\bf j}' & {\bf k}'\end{pmatrix}\\
&=&
\begin{pmatrix}{\bf i}' & {\bf j}' & {\bf k}'\end{pmatrix}\tag{3}
\end{eqnarray}

実際の例

実際ある例は、{\bf i},{\bf j},{\bf k} がそれぞれ x,y,z の各軸の軸ベクトルで、(x',y',z') を知りたいことが多いと思います。(ビュー変換はまさにその例です)
要は、(x,y,z)(x',y',z') に変換したいわけです。
回転行列は直交行列なので、回転行列の転置行列を掛ければよいですね。(直交行列の逆行列は転置行列)
この時の変換行列を以下に示します。

\begin{eqnarray}
{\bf M}^\top=\begin{pmatrix}{\bf i}' & {\bf j}' & {\bf k}'\end{pmatrix}^\top
=\begin{pmatrix}{{\bf i}'}^\top \\ {{\bf j}'}^\top \\ {{\bf k}'}^\top\end{pmatrix}
\tag{4}
\end{eqnarray}

参考文献

コンピュータグラフィックスの基礎 p30-p32

目次へ戻る