Redpoll's 60
 Home / 3Dプログラミング入門 / 第12章 $§$12-2
第12章 数学的事柄についての補足
$§$12-1 外積の導出 $§$12-7 Quaternion 2
$§$12-2 TRS分解における回転行列 $§$12-8 Quaternion 3
$§$12-3 Möller-Trumbore algorithm (レイ vs 三角形) $§$12-9 Quaternion 4
$§$12-4 三角形とBarycentric Coordinates $§$12-10 二線分間の最短距離
$§$12-5 法線ベクトルの変換 $§$12-11 「直方体 vs 直方体」における分離軸
$§$12-6 Quaternion 1 $§$12-12 Perspecive Projection Matrix

$§$12-2 TRS分解における回転行列


4-6節において変換行列をTRS分解した際、$T$、$S$ は平行移動行列、スケール行列であり、(スケール行列がそこで述べた取決めに従っているならば) $R$ は回転行列になると述べた。本節ではその証明を行う。
まずは準備的な説明から始める。

(a)  一般に行列の積は非可換であるが、行列の一部の要素に関しては積によって不変である場合がある。例えば平行移動行列 $T$ と回転行列 $R$ の積 $TR$ 及び $RT$ は以下に示されるように回転成分は同じである。
\begin{align*}&TR = \begin{pmatrix}1 &0 &0 &a \\0 &1 &0 &b \\0 &0 &1 &c \\0 &0 &0 &1 \end{pmatrix} \begin{pmatrix}r_{11} &r_{12} &r_{13} &0 \\r_{21} &r_{22} &r_{23} &0 \\r_{31} &r_{32} &r_{33} &0 \\0 &0 &0 &1 \end{pmatrix}=\begin{pmatrix}r_{11} &r_{12} &r_{13} &a \\r_{21} &r_{22} &r_{23} &b \\r_{31} &r_{32} &r_{33} &c \\0 &0 &0 &1 \end{pmatrix}\\\\&RT = \begin{pmatrix}r_{11} &r_{12} &r_{13} &0 \\r_{21} &r_{22} &r_{23} &0 \\r_{31} &r_{32} &r_{33} &0 \\0 &0 &0 &1 \end{pmatrix} \begin{pmatrix}1 &0 &0 &a \\0 &1 &0 &b \\0 &0 &1 &c \\0 &0 &0 &1 \end{pmatrix}=\begin{pmatrix}r_{11} &r_{12} &r_{13} &ar_{11} + br_{12} + cr_{13} \\r_{21} &r_{22} &r_{23} &ar_{21} + br_{22} + cr_{23} \\r_{31} &r_{32} &r_{33} &ar_{31} + br_{32} + cr_{33} \\0 &0 &0 &1 \end{pmatrix}\end{align*}
したがって適当な平行移動行列 $T'$ によって、$RT = T'R$ と書き換えることができる。


(b)  また平行移動成分を含まない行列と一様スケール行列との積は可換である。実際、$M$ を平行移動成分を含まない行列、$S$ を一様スケール行列とすれば、
\begin{align*}&SM = \begin{pmatrix}s &0 &0 &0 \\0 &s &0 &0 \\0 &0 &s &0 \\0 &0 &0 &1 \end{pmatrix}\begin{pmatrix}m_{11} &m_{12} &m_{13} &0 \\m_{21} &m_{22} &m_{23} &0 \\m_{31} &m_{32} &m_{33} &0 \\0 &0 &0 &1 \end{pmatrix}=\begin{pmatrix}sm_{11} &sm_{12} &sm_{13} &0 \\sm_{21} &sm_{22} &sm_{23} &0 \\sm_{31} &sm_{32} &sm_{33} &0 \\0 &0 &0 &1 \end{pmatrix}\\\\&MS = \begin{pmatrix}m_{11} &m_{12} &m_{13} &0 \\m_{21} &m_{22} &m_{23} &0 \\m_{31} &m_{32} &m_{33} &0 \\0 &0 &0 &1 \end{pmatrix}\begin{pmatrix}s &0 &0 &0 \\0 &s &0 &0 \\0 &0 &s &0 \\0 &0 &0 &1 \end{pmatrix}=\begin{pmatrix}sm_{11} &sm_{12} &sm_{13} &0 \\sm_{21} &sm_{22} &sm_{23} &0 \\sm_{31} &sm_{32} &sm_{33} &0 \\0 &0 &0 &1 \end{pmatrix}\end{align*}
である。


(c)  回転行列は特殊直交群 $SO(3)$ の元であるから、回転行列はその積に関して閉じている。つまり、$R_1, R_2 \in SO(3)$ ならば $R_1R_2 \in SO(3)$ である。これは簡単にいえば回転行列 $R_1$、$R_2$ の積 $R_1R_2$ も回転行列になることを意味する (特に証明は省くが平行移動行列同士の積も平行移動行列であり、スケール行列同士の積もスケール行列である)。


では、以上をふまえて$TRS$分解における $R$ が回転行列であること証明する。
$n$ 個($n \geq 1$)の変換行列の積 $M$ を$TRS$分解したときの $R$ は回転行列である。

ただし変換行列の積に関してスケール行列は次の取り決めに従っているものとする。
$(1)$  非一様スケール(各軸の倍率が異なるスケール)を実行する場合は、変換の合成において一番初めに実行し、それ以降では非一様スケールは実行しないものとする
$(2)$  倍率が $0$ 以下のスケール(倍率が $0$ あるいはマイナスの値をとるスケール)は実行しない

(証明)  数学的帰納法によって証明する。$n = 1$ のときは明らかであるから $n \geq 2$ とし、$n-1$ までは上の命題が成り立つと仮定する。
$n$ 番目に掛ける行列が平行移動行列、回転行列、スケール行列の場合でそれぞれ見ていく。なお以下では $M = M_nM_{n-1} \ldots M_2M_1$ とし、$M' = M_{n-1} \ldots M_2M_1$ とする ($M = M_nM')$。このとき、$M'$ は $n-1$ 個の変換行列の積であるから仮定によって適当な平行移動行列 $T'$、回転行列 $R'$、スケール行列 $S'$ によって $M'=T'R'S'$ と分解される。

$(\mathrm{i})$  $M_n$ が平行移動行列の場合
$M_n = T$ とすれば、$M = TM' = TT'R'S'$ となるが、結合法則により $TT'R'S' = (TT')(R'S')$。平行移動行列同士の積は平行移動行列であるから、$T'' = TT'$ とすれば $M = T''R'S$ となる。
このときの$TRS$分解における $R$ は $R'$ であるが、$R'$ は回転行列である。

$(\mathrm{i}\mathrm{i})$  $M_n$ が回転行列の場合
$M_n = R$ とすれば、$M = RM' = RT'R'S'$ であるが、上で示したように回転行列と平行移動行列の積 $RT'$ は適当な平行移動行列 $T''$ によって $RT' = T''R$ と書き換えることができる。したがって、$(RT')(R'S) = (T''R)(R'S)$ である。
さらに、$RR' = R''$ とすれば $R''$ は回転行列の積であるから、$R''$ も回転行列である。結局、\[ M = RT'R'S' = T''RR'S' = T''R''S' \]となり、このときの$TRS$分解における $R$ は $R''$ であるがこれは回転行列である。

$(\mathrm{i}\mathrm{i}\mathrm{i})$  $M_n$ がスケール行列の場合
$M_n = S$ とすれば、$M = SM' = ST'R'S'$ である。
ここで $S$、$M'$ の各成分を次のように置く (上の取決めにより $S$ は一様スケールである)。
\[S = \begin{pmatrix}s &0 &0 &0 \\0 &s &0 &0 \\0 &0 &s &0 \\0 &0 &0 &1 \end{pmatrix}\quad\quad\quad M' = T'R'S' =\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}\]
回転行列 $R'$ とスケール行列 $S'$ の積 $R'S'$ は単に上の$M'$ から平行移動成分を取り除いたものであり、以下の形である。
\[R'S' =\begin{pmatrix}m_{11} &m_{12} &m_{13} &0 \\m_{21} &m_{22} &m_{23} &0 \\m_{31} &m_{32} &m_{33} &0 \\0 &0 &0 &1 \end{pmatrix}\]このとき、$M = SM'$ は具体的には\[M = SM' =\begin{pmatrix}sm_{11} &sm_{12} &sm_{13} &sm_{14} \\sm_{21} &sm_{22} &sm_{23} &sm_{24} \\sm_{31} &sm_{32} &sm_{33} &sm_{34} \\0 &0 &0 &1 \end{pmatrix}\]となるが、この行列から平行移動成分を取り除いた下記の行列は先ほどの $R'S'$ に $S$ を掛けたものに等しい。すなわち、\[S(R'S') = (R'S')S = \begin{pmatrix}sm_{11} &sm_{12} &sm_{13} &0 \\sm_{21} &sm_{22} &sm_{23} &0 \\sm_{31} &sm_{32} &sm_{33} &0 \\0 &0 &0 &1 \end{pmatrix}\]である (上で示したように平行移動成分を含まない変換行列と一様スケール行列との積は可換である)。
ここで、$S'S = S''$ とすればスケール行列同士の積はスケール行列であるから $S''$ はスケール行列である。さらに、平行移動行列 $T''$ を\[T'' = \begin{pmatrix}1 &0 &0 &sm_{14} \\0 &1 &0 &sm_{24} \\0 &0 &1 &sm_{34} \\0 &0 &0 &1 \end{pmatrix}\]と定めると、$T''R'S''$ は\[(T''R'S'S =)\ \ T''R'S'' =\begin{pmatrix}sm_{11} &sm_{12} &sm_{13} &sm_{14} \\sm_{21} &sm_{22} &sm_{23} &sm_{24} \\sm_{31} &sm_{32} &sm_{33} &sm_{34} \\0 &0 &0 &1 \end{pmatrix}\]となるが、これは $M$ に等しい。
すなわち $M = T''R'S''$ であり、このときの$TRS$分解における $R$ は $R'$ であるが、$R'$ は回転行列である。

以上から $n$ 個の変換行列の積 $M$ を$TRS$分解したときの $R$ が回転行列であることが示された。 (証明終)


















12-3  >>
Möller-Trumbore algorithm (レイ vs 三角形)
© 2020-2024 Redpoll's 60 (All rights reserved)