解答例
問題1
\[ T = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 4 & -1 & 1 \end{bmatrix} \]
答え:
\[ (6, 2) \]
問題2
\[ S = \begin{bmatrix} 3 & 0 & 0 \\ 0 & 2 & 0 \\ 0 & 0 & 1 \end{bmatrix} \]
答え:
\[ (6, 6) \]
問題3
\[ R = \begin{bmatrix} 0 & 1 & 0 \\ -1 & 0 & 0 \\ 0 & 0 & 1 \end{bmatrix} \]
答え:
\[ (0, 1) \]
問題4
\[ S = \begin{bmatrix} 2 & 0 & 0 \\ 0 & 3 & 0 \\ 0 & 0 & 1 \end{bmatrix} \]
\[ T = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 5 & -1 & 1 \end{bmatrix} \]
\[ M = S T = \begin{bmatrix} 2 & 0 & 0 \\ 0 & 3 & 0 \\ 5 & -1 & 1 \end{bmatrix} \]
答え:
\[ (7, 5) \]
問題5
Aは、平行移動してから拡大するので、
\[ M_A = T S \]
\[ M_A = \begin{bmatrix} 2 & 0 & 0 \\ 0 & 2 & 0 \\ 6 & 0 & 1 \end{bmatrix} \]
答え:
\[ (8, 2) \]
Bは、拡大してから平行移動するので、
\[ M_B = S T \]
\[ M_B = \begin{bmatrix} 2 & 0 & 0 \\ 0 & 2 & 0 \\ 3 & 0 & 1 \end{bmatrix} \]
答え:
\[ (5, 2) \]
平行移動の前に拡大するか、後に拡大するかで、移動量も拡大されるかどうかが変わる。
問題6
\[ T = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 4 & -2 & 1 & 1 \end{bmatrix} \]
答え:
\[ (5, 0, 4) \]
問題7
\[ S = \begin{bmatrix} 2 & 0 & 0 & 0 \\ 0 & 3 & 0 & 0 \\ 0 & 0 & 4 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \]
答え:
\[ (2, 6, 12) \]
問題8
\[ R_y = \begin{bmatrix} 0 & 0 & -1 & 0 \\ 0 & 1 & 0 & 0 \\ 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \]
答え:
\[ (0, 0, -1) \]
問題9
\[ S = \begin{bmatrix} 2 & 0 & 0 & 0 \\ 0 & 2 & 0 & 0 \\ 0 & 0 & 2 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \]
\[ R_y = \begin{bmatrix} 0 & 0 & -1 & 0 \\ 0 & 1 & 0 & 0 \\ 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \]
\[ T = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 3 & 1 & 2 & 1 \end{bmatrix} \]
\[ M = S R_y T = \begin{bmatrix} 0 & 0 & -2 & 0 \\ 0 & 2 & 0 & 0 \\ 2 & 0 & 0 & 0 \\ 3 & 1 & 2 & 1 \end{bmatrix} \]
答え:
\[ (9, 5, 0) \]
問題10
Aは、平行移動してから回転するので、
\[ M_A = T R_y \]
\[ M_A = \begin{bmatrix} 0 & 0 & -1 & 0 \\ 0 & 1 & 0 & 0 \\ 1 & 0 & 0 & 0 \\ 0 & 0 & -5 & 1 \end{bmatrix} \]
答え:
\[ (0, 0, -6) \]
Bは、回転してから平行移動するので、
\[ M_B = R_y T \]
\[ M_B = \begin{bmatrix} 0 & 0 & -1 & 0 \\ 0 & 1 & 0 & 0 \\ 1 & 0 & 0 & 0 \\ 5 & 0 & 0 & 1 \end{bmatrix} \]
答え:
\[ (5, 0, -1) \]
平行移動してから回転すると、移動後の位置全体が原点の周りを回転する。 回転してから平行移動すると、向きだけを変えてから指定方向に移動する。
確認ポイント
DirectX11形式の合成順
点を行ベクトルで扱う場合、
\[ P' = P M \]
である。
そのため、変換順が
- 拡大縮小
- 回転
- 平行移動
なら、
\[ M = S R T \]
になる。
よくある間違い
列ベクトル形式の感覚で、
\[ M = T R S \]
と書くと、DirectX11形式では変換順が逆になってしまう。
このプリントでは、常に
\[ P' = P M \]
として計算する。