2022年度計算機演習A・B

第11回:行列と幾何変換2

1. 平行移動とアフィン変換

前回の授業では、与えられた点や図形に対して幾何変換を行うことを考え、行列を用いて表現される線形変換(特に、拡大・縮小変換、回転変換、対称変換、せん断変換)について扱いました。

今回の授業では、平行移動とアフィン変換について扱います。

1.1. 平行移動

変換前の点を $(x,y)$、変換後の点を $(x',y')$ とするとき、$x$ 軸方向に $p$、$y$ 軸方向に $q$ だけ平行移動する変換は、

$$ \begin{pmatrix} x'\\ y' \end{pmatrix} = \begin{pmatrix} x\\ y \end{pmatrix} + \begin{pmatrix} p\\ q \end{pmatrix} $$

と表されます。

例として、前回の1.1の三角形に対して $x$ 軸方向に $2$、$y$ 軸方向に $1$ だけ平行移動する変換を行うと、次のようになります。

1.2. アフィン変換

アフィン変換(affine transformation)は、線形変換と平行移動を組み合わせた変換であり、

$$ \begin{pmatrix} x'\\ y' \end{pmatrix} =A \begin{pmatrix} x\\ y \end{pmatrix} + \begin{pmatrix} p\\ q \end{pmatrix} $$

の形で表されます。ここで、$A$ は $2\times 2$ の行列です。

$p=q=0$ の場合には線形変換、$A$ が単位行列の場合には平行移動になるため、アフィン変換は線形変換および平行移動を一般化した概念であることが分かります。

例として、前回の1.1の三角形に対して $x$ 軸方向に $2$ 倍、$y$ 軸方向に $1.5$ 倍してから $x$ 軸方向に $2$、$y$ 軸方向に $1$ だけ平行移動する変換を行うと、次のようになります。

2. 様々な家の描画

ここでは、前回描画した家の図に対してアフィン変換を行うことを考えます。

まず、家に対して塗りつぶしや色の変更を適宜行った上で、その描画を行う関数を定義します。

matplotlibにおける色の指定方法は、色の頭文字、カラーネーム、RGB形式、16進数カラーコードなど複数用意されています。詳しくは、参考リンクをご覧ください。

演習1

自分なりの家の図を描画する関数house()を定義し、その関数を呼び出してください。前回の演習1の内容に加えて、適宜塗りつぶしや色の変更を行うこと。

次に、家に対して任意のアフィン変換を行った結果を描画する関数を定義します。

演習2

演習1の家に対して行列 $A$ と ベクトル $b$ によるアフィン変換を行った結果を描画する関数house_transform(A,b)を定義し、変換前の家と適当なアフィン変換を行った家を一つの図に描画してください。

演習3(オプション)

演習1の関数house()と演習2の関数house_transform(A,b)を利用して、

を一つの図に描画してください。

さらに、線形変換と平行移動の順番を変えることの意味について考察してください。

(Markdownとして考察を書く)

第11回レポート課題

演習1~演習3に取り組んでください。