行列と幾何変換 III

本資料では、同次座標系と合成変換を紹介します。余裕がある方は各自で資料を読んでコードを試してみてください。 質問がある場合、担当教員に聞いてください。

復習

「家」の描画は繰り返し使用されますので、関数としてまとめて定義しましょう。

myhomeを使って、家を描いてみます。

1. 同次座標系

平面上の点$(x,y)$を以下のように拡張して、同次座標系で表現することができます。

$$ \left(\begin{array}{c}x\\y\end{array}\right) \Rightarrow \left(\begin{array}{c}x\\y\\1 \end{array}\right) $$

同次座標系から普通の座標系への変換($c\not =0$ のとき):

$$(x,y,c) \Rightarrow \left(\frac{x}{c},\frac{y}{c}\right)$$

同次座標系を使えば、アフィン変換は行列とベクトルの積として書けます。

例えば、アフィン変換 $$ \left(\begin{array}{c}x\\y\end{array}\right) \Rightarrow \left(\begin{array}{c}x'\\y'\end{array}\right) = \left(\begin{array}{cc}a&b\\ c& d\end{array}\right) \left(\begin{array}{c}x\\y\end{array}\right) + \left(\begin{array}{c}x_0 \\ y_0 \end{array}\right) $$

に対して同次座標系を使うと、アフィン変換を一つの行列にまとめることができます。

$$ \left(\begin{array}{c}x\\y\\1 \end{array}\right) \Rightarrow \left(\begin{array}{c}x'\\y'\\1 \end{array}\right) =A\left(\begin{array}{c}x\\y\\1 \end{array}\right), \quad A=\left(\begin{array}{ccc}a&b&x_0\\ c&d & y_0 \\ 0 & 0 & 1 \end{array}\right) $$

回転変換を表す行列は以下のようになります。 $$ A = \left(\begin{array}{ccc}\cos \alpha & -\sin \alpha & 0\\ \sin\alpha & \cos \alpha & 0 \\0 & 0 & 1 \end{array}\right) $$

$(x_0,y_0)$による平行移動を表す行列は以下のようになります。

$$ A = \left(\begin{array}{ccc} 1 & 0 & x_0 \\ 0 & 1 & y_0\\ 0 & 0 & 1 \end{array}\right) $$

例1

以下のコードでは「家」を反時計回りに$\alpha=30$度回転して、ベクトル(5,1)だけ平行移動します。

変換行列: $$ A = \left(\begin{array}{ccc}\cos \alpha & -\sin \alpha & 5\\ \sin\alpha & \cos \alpha & 1 \\0 & 0 & 1 \end{array}\right) $$

演習 1

レポート課題で作成した「私の家」を、同次座標系の形に直してみてください。ここで、変換行列は$3 \times 3$の行列であることに注意してください。

2. 合成変換

同次座標系を使う場合、合成変換は行列の積の形で書けます。例えば、平面上の点に対する2つの変換を考え、それぞれの変換に対応する行列を$A_1$, $A_2$とします。 このとき、2つの変換の合成に対応する行列$A$は次のようになります。

演習2

家を$(2,3)$だけ平行移動する変換$A_1$と反時計回りに$\alpha = 10$度回転する変換$A_2$を考えます。

$$ A_1 = \left(\begin{array}{ccc} 1 & 0 & 2 \\ 0 & 1 & 3\\ 0 & 0 & 1 \end{array}\right), \quad A_2 = \left(\begin{array}{ccc}\cos \alpha & -\sin \alpha & 0\\ \sin\alpha & \cos \alpha & 0 \\0 & 0 & 1 \end{array}\right)\:. $$

行列$B_1=A_1A_2$と$B_2=A_2A_1$をそれぞれ家を表す点列に掛けて、変換結果の違いを確認してください。