行列から平行移動量を取得する方法と理屈

4x4行列から平行移動量を取得する方法を説明します。なぜそれで取得できるのか理屈も書いています。

アフィン変換行列から平行移動量を取得する

行列がアフィン変換だと分かっていれば、次のように平行移動量を取得できます。

列優先の場合:

行列 (M11M12M13M14M21M22M23M24M31M32M33M34M41M42M43M44)\begin{pmatrix} M_{11} & M_{12} & M_{13} & \color{magenta}M_{14} \\ M_{21} & M_{22} & M_{23} & \color{magenta}M_{24} \\ M_{31} & M_{32} & M_{33} & \color{magenta}M_{34} \\ M_{41} & M_{42} & M_{43} & M_{44} \\ \end{pmatrix} の平行移動量は (M14M24M34)\begin{pmatrix} \color{magenta}M_{14} \\ \color{magenta}M_{24} \\ \color{magenta}M_{34} \end{pmatrix} です。

行優先の場合:

行列 (M11M12M13M14M21M22M23M24M31M32M33M34M41M42M43M44)\begin{pmatrix} M_{11} & M_{12} & M_{13} & M_{14} \\ M_{21} & M_{22} & M_{23} & M_{24} \\ M_{31} & M_{32} & M_{33} & M_{34} \\ \color{magenta}M_{41} & \color{magenta}M_{42} & \color{magenta}M_{43} & M_{44} \\ \end{pmatrix} の平行移動量は (M41M42M43)\begin{pmatrix} \color{magenta}M_{41} & \color{magenta}M_{42} & \color{magenta}M_{43} \end{pmatrix} です。

汎用的な行列から平行移動量を取得する

汎用的な行列を扱う場合、結果は4次元ベクトル(同次座標)になります。

列優先の場合:

行列 (M11M12M13M14M21M22M23M24M31M32M33M34M41M42M43M44)\begin{pmatrix} M_{11} & M_{12} & M_{13} & \color{magenta}M_{14} \\ M_{21} & M_{22} & M_{23} & \color{magenta}M_{24} \\ M_{31} & M_{32} & M_{33} & \color{magenta}M_{34} \\ M_{41} & M_{42} & M_{43} & \color{magenta}M_{44} \\ \end{pmatrix} の平行移動量は (M14M24M34M44)\begin{pmatrix} \color{magenta}M_{14} \\ \color{magenta}M_{24} \\ \color{magenta}M_{34} \\ \color{magenta}M_{44} \end{pmatrix} です。

行優先の場合:

行列 (M11M12M13M14M21M22M23M24M31M32M33M34M41M42M43M44)\begin{pmatrix} M_{11} & M_{12} & M_{13} & M_{14} \\ M_{21} & M_{22} & M_{23} & M_{24} \\ M_{31} & M_{32} & M_{33} & M_{34} \\ \color{magenta}M_{41} & \color{magenta}M_{42} & \color{magenta}M_{43} & \color{magenta}M_{44} \\ \end{pmatrix} の平行移動量は (M41M42M43M44)\begin{pmatrix} \color{magenta}M_{41} & \color{magenta}M_{42} & \color{magenta}M_{43} & \color{magenta}M_{44} \end{pmatrix} です。

理屈

列優先の場合で説明します。

原点座標(0,0,0)を行列で変換したときの移動先の座標値が平行移動量 t\bm{t} と同じなので

t=(M11M12M13M14M21M22M23M24M31M32M33M34M41M42M43M44)(0001)=(M14M24M34M44)\bm{t} = \begin{pmatrix} M_{11} & M_{12} & M_{13} & M_{14} \\ M_{21} & M_{22} & M_{23} & M_{24} \\ M_{31} & M_{32} & M_{33} & M_{34} \\ M_{41} & M_{42} & M_{43} & M_{44} \\ \end{pmatrix} \begin{pmatrix} 0 \\ 0 \\ 0 \\ 1 \end{pmatrix} = \begin{pmatrix} M_{14} \\ M_{24} \\ M_{34} \\ M_{44} \end{pmatrix}

となり、行列の第4列を取り出したのと同じ結果になります。

行列がアフィン変換であれば第4行が定数なので

t=(M11M12M13M14M21M22M23M24M31M32M33M340001)(0001)=(M14M24M341)\bm{t} = \begin{pmatrix} M_{11} & M_{12} & M_{13} & M_{14} \\ M_{21} & M_{22} & M_{23} & M_{24} \\ M_{31} & M_{32} & M_{33} & M_{34} \\ 0 & 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} 0 \\ 0 \\ 0 \\ 1 \end{pmatrix} = \begin{pmatrix} M_{14} \\ M_{24} \\ M_{34} \\ 1 \end{pmatrix}

となり、 M14M_{14}, M24M_{24}, M34M_{34} をそのまま3次元空間の座標値として扱えます。