行列と幾何変換 II

今回の授業では、平面上の図形の点の線形変換とアフィン変換を考えます。

復習:「家」の輪郭を描く。

ヒント:以下の三角の点列と四角の点列を使って、シンプルな「家」を描けます。

2. 線形変換

2.1 拡大・縮小変換

点の$x$座標または$y$座標を$t$倍にすることで、図形の拡大と縮小ができます。

$x$方向で$t$倍にする変換に対応する行列$A_x$:

$$ x'=tx,y' = y \Leftrightarrow \left(\begin{array}{c} x' \\ y' \end{array}\right) = \left(\begin{array}{cc} t & 0 \\ 0 & 1 \end{array}\right) \left(\begin{array}{c} x \\ y \end{array}\right) \quad A_x:=\left(\begin{array}{cc} t & 0 \\ 0 & 1 \end{array}\right) $$

$y$方向で$t$倍にする変換に対応する行列$A_y$:

$$ x'=x,y' = ty \Leftrightarrow \left(\begin{array}{c} x' \\ y' \end{array}\right) = \left(\begin{array}{cc} 1 & 0 \\ 0 & t \end{array}\right) \left(\begin{array}{c} x \\ y \end{array}\right) \quad A_y=\left(\begin{array}{cc} 1 & 0 \\ 0 & t \end{array}\right) $$

演習1

演習1で考えた「家」を$x$方向$2$倍、$y$方向$1.5$倍に伸ばして、描いてください。

今回の変換は二つの線形変換の合成になって、合成変換はまた行列で表現することができます。

$$ \left(\begin{array}{c} x' \\ y' \end{array}\right) = A_x \left(\begin{array}{c} x \\ y \end{array}\right) ,\quad \left(\begin{array}{c} x'' \\ y'' \end{array}\right) = A_y \left(\begin{array}{c} x' \\ y' \end{array}\right) \quad \Rightarrow \left(\begin{array}{c} x'' \\ y'' \end{array}\right) = A_y A_x \left(\begin{array}{c} x \\ y \end{array}\right) \quad $$

即ち、$A=A_yA_x$が合成変換に対応する行列です。

$$ A = A_yA_x = \left(\begin{array}{cc} 2 & 0 \\ 0 & 1.5 \end{array}\right) $$

2.2 回転変換

点$(x,y)$を原点に関して反時周り$\alpha$度で回転するための変換を考えます。

回転後の点を$(x',y')$とする。回転変換は以下の行列を使って表現できます。

$$ \left(\begin{array}{c}x\\y\end{array}\right) \Rightarrow \left(\begin{array}{c}x'\\y'\end{array}\right) = A \left(\begin{array}{c}x\\y\end{array}\right) $$

ここで、$A$は以下の形を持っています。 $$ A=\left(\begin{array}{cc} \cos \alpha & -\sin \alpha \\ \sin \alpha & \cos \alpha \end{array}\right) $$

回転変換の行列を求める

$(x,y)$を極座標で考えます。 $$ (x,y) = ( r \cos(\theta) , r \sin(\theta) ) $$ この点を反時周り$\alpha$度で回転する後、新しい座標$(x',y')$は以下のようになります。 $$ (x',y') = ( r \cos(\theta+\alpha), r \sin (\theta+\alpha) ) $$ 三角関数の計算を行って、以下の結果が分かります。 $$ x'= r \cos(\theta) \cos(\alpha) - r \sin(\theta) \sin(\alpha),\quad y'= r \cos(\theta) \sin(\alpha) + r \sin(\theta) \cos(\alpha) $$

例1:

頂点(0,0), (1,0), (1,1)を持っている三角形を反時計周り60度で回転します。 回転前の三角形をを青色、回転後の三角形を赤色で描きます。

演習2

演習1で考えた「家」をそれぞれ反時計周り30度,60度、90度、180度で回転して、描画しなさい。

2.3 直線$y=x$に関する反射変換

直線$y=x$に関する反射変換に対応する行列を求めます。

$R^2$空間の基底 $\{e_1, e_2\}$ ($e_1=(1,0), e_2=(0,1)$)を考えます。

よって、任意の点 $$ (x,y) = x\cdot e_1 + y\cdot e_2 $$ の$y=x$に関する反射点は $$ (x',y') =x \cdot f_1 + y \cdot f_2 = x\cdot (0,1) + y \cdot (1,0) $$ です。

ですので、直線$y=x$に関する反射変換は以下の式で現れます。 $$ \left( \begin{array}{c} x' \\ y' \end{array}\right) = \left( \begin{array}{cc} 0 & 1 \\ 1 & 0 \end{array}\right) \left( \begin{array}{c} x \\ y \end{array}\right) $$

例2:

「家」の直線$y=x$に関する反射変換を行います。

演習 3

直線$y=2x$に関する反射の変換行列を求めよ。この変換を「家」に作用してみてください。

ヒント:以下の計算手順で、??のあるところを答えを書いてください。

直線$y=2x$に関する反射変換に対応する行列を求めます。

$R^2$空間の基底 $\{e_1, e_2\}$ ($e_1=(1,0), e_2=(0,1)$)を考えます。

よって、任意の点

$$ (x,y) = x\cdot e_1 + y\cdot e_2 $$

の$y=2x$に関する反射点は

$$ (x',y') =x \cdot f_1 + y \cdot f_2 = x\cdot (??,??) + y \cdot (??,??) $$

です。

ですので、直線$y=2x$に関する反射変換は以下の式で現れます。

$$ \left( \begin{array}{c} x' \\ y' \end{array}\right) = \left( \begin{array}{cc} ?? & ?? \\ ?? & ?? \end{array}\right) \left( \begin{array}{c} x \\ y \end{array}\right) $$

2.4 一般的な線形変換

以下の行列Aは点列に関してどうのような変換を行いますか? 図形を描いて確認してください。

また、Aを自由に試して描画する時、以下のことを考えてください。

様々な変換行列 A

3. アフィン変換

アフィン変換は線形変換(拡大や縮小,回転など)と平行移動を組み合わせた変換です. 一般的なアフィン変換は以下の形にかけます。

$$ \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) $$

ここで、$(x_0,y_0)$は平行移動の方向を示しています。

注意: アフィン変換は線形変換ではないです!

演習 4

以下の変換に対応する$A$と$(x_0,y_0)$を求めて、変換を「家」の図形にかけてみてください。

[2]のヒント:

$x_1=2, y_1=3$とすると、

$$ \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( \left(\begin{array}{c}x\\y\end{array}\right) + \left(\begin{array}{c}x_1 \\ y_1 \end{array}\right) \right) = \left(\begin{array}{cc}a&b\\c&d\end{array}\right) \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_1 \\ y_1 \end{array}\right) $$