[3D]座標の変換、及び座標系の変換②

転置の文脈が2種類ある。

変換対象となるベクトルが縦ベクトルか横ベクトルかによって変換行列は転置される。

数学的に厳密には変換行列はMの逆行列だが、基底に正規直交基底を選べば逆行列=転置であるから、変換行列はただのMの転置である。

数学的な参考書をみるとずっと逆行列の話をしているが、
ゲーム的なプログラム本をみると暗黙の内に勝手に転置ですませている。

変換行列M

3次元の基底ベクトルを2つ考える。

元の基底を

$$
\lbrace \bm e_1, \bm e_2, \bm e_3\rbrace
$$

変換先の基底を

$$
\lbrace \bm b_1, \bm b_2, \bm b_3\rbrace
$$

とする。

この時基底bは基底eの線形結合で表されて

$$
\bm b_i = m_{i1} \bm e_1 + m_{i2} \bm e_2 + m_{i3} \bm e_3
$$

であって

$$
\bm b_1 = m_{11} \bm e_1 + m_{12} \bm e_2 + m_{13} \bm e_3\\
\bm b_2 = m_{21} \bm e_1 + m_{22} \bm e_2 + m_{23} \bm e_3\\
\bm b_3 = m_{31} \bm e_1 + m_{32} \bm e_2 + m_{33} \bm e_3
$$

となる。つまり

$$
\bm b_1(m_{11}, m_{12}, m_{13})\\
\bm b_2(m_{21}, m_{22}, m_{23})\\
\bm b_3(m_{31}, m_{32}, m_{33})
$$

この時の行列を基底変換行列

$$
M =
\begin{bmatrix}
m_{11} & m_{12} & m_{13} \\
m_{21} & m_{22} & m_{23} \\
m_{31} & m_{32} & m_{33} \\
\end{bmatrix}
$$

とすると、

$$
\begin{pmatrix}
\bm b_1\\
\bm b_2\\
\bm b_3
\end{pmatrix}
=
M
\begin{pmatrix}
\bm e_1\\
\bm e_2\\
\bm e_3
\end{pmatrix}
$$

Mの転置

もしも

$$
M' =
\begin{bmatrix}
m_{11} & m_{21} & m_{31} \\
m_{12} & m_{22} & m_{32} \\
m_{13} & m_{23} & m_{33} \\
\end{bmatrix}
$$

ならば式は

$$
(\bm b_1, \bm b_2, \bm b_3)=(\bm e_1, \bm e_2, \bm e_3)M'
$$

普通、

$$
M'=
\begin{bmatrix}
\\
\bm b_1 & \bm b_2 & \bm b_3\\
\\
\end{bmatrix}
$$

であって、行列は縦ベクトルからつくられる。
なのでMよりM'が基本である。


M'の逆行列

元の座標系にある座標群$${v}$$は$${M'^{-1}}$$によって
元の座標から新しい座標系$${v'}$$に移される。

$$
v'=M'^{-1}v
$$

空間上の一点

M'

空間上のある座標は基底の線形結合で表される。

$$
x'\bm b_1+y'\bm b_2+z'\bm b_3
=x\bm e_1+y\bm e_2+z\bm e_3
$$

$$
(\bm b_1, \bm b_2, \bm b_3)
\begin{pmatrix}
x'\\
y'\\
z'
\end{pmatrix}
=
(\bm e_1, \bm e_2, \bm e_3)
\begin{pmatrix}
x\\
y\\
z
\end{pmatrix}
$$

ここで

$$
(\bm b_1, \bm b_2, \bm b_3)=(\bm e_1, \bm e_2, \bm e_3)M'
$$

だったから

$$
(\bm e_1, \bm e_2, \bm e_3)M'
\begin{pmatrix}
x'\\
y'\\
z'
\end{pmatrix}
=
(\bm e_1, \bm e_2, \bm e_3)
\begin{pmatrix}
x\\
y\\
z
\end{pmatrix}
$$

$$
M'
\begin{pmatrix}
x'\\
y'\\
z'
\end{pmatrix}
=
\begin{pmatrix}
x\\
y\\
z
\end{pmatrix}
$$

$$
\begin{pmatrix}
x'\\
y'\\
z'
\end{pmatrix}
=
M'^{-1}
\begin{pmatrix}
x\\
y\\
z
\end{pmatrix}
$$

M

あるいは

$$
(x', y', z')
\begin{pmatrix}
\bm b_1\\
\bm b_2\\
\bm b_3
\end{pmatrix}
=
(x, y, z)
\begin{pmatrix}
\bm e_1\\
\bm e_2\\
\bm e_3
\end{pmatrix}
$$

ここで

$$
\begin{pmatrix}
\bm b_1\\
\bm b_2\\
\bm b_3
\end{pmatrix}
=
M
\begin{pmatrix}
\bm e_1\\
\bm e_2\\
\bm e_3
\end{pmatrix}
$$

だったから

$$
(x', y', z')
M
\begin{pmatrix}
\bm e_1\\
\bm e_2\\
\bm e_3
\end{pmatrix}
=
(x, y, z)
\begin{pmatrix}
\bm e_1\\
\bm e_2\\
\bm e_3
\end{pmatrix}
$$

$$
(x', y', z')
M
=
(x, y, z)
$$

$$
(x', y', z')
=
(x, y, z)
M^{-1}
$$

Mの転置=Mの逆行列

座標系の基底を正規直交基底(長さが1で互いに直交するベクトル)に選べば、それらが作る変換行列は直交行列であって、$${M^T=M^{-1}}$$である。

$$
M'=
\begin{bmatrix}
\\
\bm b_1 & \bm b_2 & \bm b_3\\
\\
\end{bmatrix}
$$

だったから、
流れ上

$$
M^T=
\begin{bmatrix}
\\
\bm b_1 & \bm b_2 & \bm b_3\\
\\
\end{bmatrix}
$$

$$
M=
\begin{bmatrix}
&\bm b_1&\\
&\bm b_2 &\\
&\bm b_3 &\\
\end{bmatrix}
$$

とする。
基底を正規直交基底に選ぶなら

$$
\bm b_1 \cdot \bm b_2=\bm b_2 \cdot \bm b_3=\bm b_3 \cdot \bm b_1=0
$$

ベクトルの長さはピタゴラス的に成分の2乗の総和の平方根である。
内積は成分同士の積の総和であって、同一ベクトルの内積は成分の2乗の総和であるから、これは長さの2乗に等しい。$${\mathbf v \cdot \mathbf v=|\mathbf v|^2}$$。
今、基底に長さ1の単位ベクトルを選んでいるから、

$$
\mathbf e \cdot \mathbf e=|\mathbf e|^2=1^2=1
$$

であって

$$
\bm b_1 \cdot \bm b_1=\bm b_2 \cdot \bm b_2=\bm b_3 \cdot \bm b_3=1
$$

これを踏まえると

$$
MM^T=I
$$

であるから

$$
M^T=M^{-1}
$$

となって、正規直交ベクトルから作ったベクトルは直交行列となることがわかる。


この記事が気に入ったらサポートをしてみませんか?