描画は繰り返し使用されますので、関数でまとめて定義しましょう。onaxis("equal")endmyhomeを使って、家を描いてみます。前回の授業で考えた「家」を描くためのmyhome()関数を作ってください。myhome()%ここにコードを描いてください。一般的なアフィン変換は以下の形にかけます。$$ここで、$(x_0,y_0)$は平行移動の方向を示しています。myhome_affine(A,b)を作りなさい。myhome_affine(A,b)%ここにコードを描いてください。注意:[1]と[2]をmyhome_affine()で描いてください。家を反時計回り45度回転し、$x$方向で$2$、$y$方向で$3$移動して、描いてください。家を$(2,3)$方向で移動し、反時計回り45度回転して、描いてください。点$(x,y)$を以下のように拡張して、同次座標系で表現することができます。(x/c,y/c)$$同次座標系を使って、アフィン変換は行列とベクトルの積に書けます。$$回転変換は以下のようになります。$$$(x_0,y_0)$方向への平行移動は以下のようになります。$$以下の例は「家」を反時計周り30ど回転して、(2,3)方向へ移動します。4¶myhome_affineを修正して、以下のような関数を作りなさい。3$の行列であることを注意しなさい。ここにコードを描いてください。使う場合、合成変換は行列の積の形に書けます。平面上の点に作用する2つの変換について、それぞれの変換に対応する行列を$A_1$と$A_2$とします。この場合、2つの変換の合成に対応する行列$A$は次ぎのようになります。$A_1$の後に$A_2$を作用する場合、$A=A_2A_1$。$A_2$の後に$A_1$を作用する場合、$A=A_1A_2$。例、家を$(2,3)$方向へ移動する変換$A_1$と反時計周り$\alpha$度を回転する変換$A_2$は以下のようにになります。$$行列の積$B_1=A_1A_2$と$B_2=A_2A_1$の違いを確認してください。以下の行列に対応する変形を考えてください。分からない場合、上記のセルのコードで試してください。3$行列を求めてください。以下のリンクで書かれた「坂の上の家」のように様々な形を持っている家を描いてください。家に関する変形や、家の数は自由です。変形の例:家を(-10,5)に移動して、反時計周り10度で回転し、家の高さを1.5倍にすること。(チャレンジ)¶ここで考えているのはカメラの撮影に関わる3次元空間のアフィン変換です。平面$z=1$への投影変換を考えます。点$(x,y,z)$を$z=1$への投影を$(x',y')$とします。$(x',y')$の計算式を求めてください。三次元空間の点を同次座標系で考えます。3次元の点を$X=(x,y,z,1)$で書きます。$X$の投影した点$X'$は2次元同次座標系で$X'=(x,y,z)$と書けます。$X$から$X'$まで変換させる行列$P$を求めてください。頂点が$(-1,-1,5)$,$(1,0,5)$,$(0,2,5)$,$(0,0,6)$である四面体の平面$z=1$への投影を描いてください。