いままで証明してきたもの。
証明ばっかりしてたから、
なにをどうしたか忘れかけてる・・・。
というわけで、ここで一度再掲。
まずは、やりたいアフィン変換
\(
\begin{bmatrix}
x\prime\\
y\prime\\
1
\end{bmatrix}=
\begin{bmatrix}
\cos(30^\circ) & -\sin(30^\circ) & 0 \\
\sin(30^\circ) & \cos(30^\circ) & 0 \\
0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
1 & 0 & 0.5 \\
0 & 1 & 0 \\
0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
x\\
y\\
1
\end{bmatrix}
\)
そして、それを効率的に実現するには、
先に行列の合成が出来ている方が望ましい。
よって、結合法則の証明結果。
\((AB)C\)の任意成分(i,l)
\(
\begin{eqnarray}
&&\displaystyle\sum_{k=1}^n\bigg(\sum_{j=1}^m a_{ij}b_{jk}\bigg)c_{kl}\\
&=&\sum_{j=1}^m \sum_{k=1}^n a_{ij}b_{jk} c_{kl}
\end{eqnarray}
\)
\(A(BC)\)の任意成分(i,l)
\(
\begin{eqnarray}
&&\displaystyle\sum_{j=1}^n a_{ij}\bigg(\sum_{k=1}^n b_{jk}c_{kl}\bigg)\\
&=&\sum_{j=1}^m \sum_{k=1}^n a_{ij}b_{jk} c_{kl}
\end{eqnarray}
\)
これでアフィン行列の結合が可能なことは分かったが、
アフィン逆変換だと、逆行列が絡む都合、少し事情が変わる。
移動後に回転するアフィン逆変換の式
\(
\begin{bmatrix}
x\\
y\\
1
\end{bmatrix}=
\Bigg(
\begin{bmatrix}
\cos(30^\circ) & -\sin(30^\circ) & 0\\
\sin(30^\circ) & \cos(30^\circ) & 0\\
0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
1 & 0 & 0.5\\
0 & 1 & 0\\
0 & 0 & 1
\end{bmatrix}
\Bigg)^{-1}
\begin{bmatrix}
x\prime\\
y\prime\\
1
\end{bmatrix}
\)
そこで、「行列の積の逆行列」と「逆行列の積」の関係性について証明。
\(
\begin{eqnarray}
(AB)(B^{-1}A^{-1})=A(BB^{-1}A^{-1}=AIA^{-1}=AA^{-1}=I\\
(B^{-1}A^{-1})(AB)=B(AA^{-1}B^{-1}=BIB^{-1}=BB^{-1}=I\\
\end{eqnarray}
\)
よって、
\(
\begin{eqnarray}
(AB)(B^{-1}A^{-1})=(B^{-1}A^{-1})(AB)=I\\
(AB)(AB)^{-1}=(AB)^{-1}(AB)=I\\
(AB)^{-1}=B^{-1}A^{-1}
\end{eqnarray}
\)
アフィン逆変換の合成且つ各逆行列の関係
それでは、これらを利用して、
アフィン逆変換の合成且つ各逆行列の関係を見てみる。
移動アフィン
\(
\begin{bmatrix}
x\\
y\\
1
\end{bmatrix}=
\begin{bmatrix}
1 & 0 & 0.5\\
0 & 1 & 0\\
0 & 0 &1
\end{bmatrix}^{-1}
\begin{bmatrix}
x\prime\\
y\prime\\
1
\end{bmatrix}
\)
回転アフィン
\(
\begin{bmatrix}
x\\
y\\
1
\end{bmatrix}=
\begin{bmatrix}
\cos(30^\circ) & -\sin(30^\circ) & 0\\
\sin(30^\circ) & \cos(30^\circ) & 0\\
0 & 0 &1
\end{bmatrix}^{-1}
\begin{bmatrix}
x\prime\\
y\prime\\
1
\end{bmatrix}
\)
移動、回転の合成アフィン
\(
\begin{bmatrix}
x\\
y\\
1
\end{bmatrix}=\Bigg(
\begin{bmatrix}
\cos(30^\circ) & -\sin(30^\circ) & 0\\
\sin(30^\circ) & \cos(30^\circ) & 0\\
0 & 0 &1
\end{bmatrix}
\begin{bmatrix}
1 & 0 & 0.5\\
0 & 1 & 0\\
0 & 0 &1
\end{bmatrix}\Bigg)^{-1}
\begin{bmatrix}
x\prime\\
y\prime\\
1
\end{bmatrix}
\)
ここに「行列の積の逆行列」と「逆行列の積」の関係性を適用する。
「行列の積の逆行列」と「逆行列の積」の関係性
\(
(AB)^{-1}=B^{-1}A^{-1}
\)
\(
\begin{bmatrix}
x\\
y\\
1
\end{bmatrix}=
\begin{bmatrix}
1 & 0 & 0.5\\
0 & 1 & 0\\
0 & 0 &1
\end{bmatrix}^{-1}
\begin{bmatrix}
\cos(30^\circ) & -\sin(30^\circ) & 0\\
\sin(30^\circ) & \cos(30^\circ) & 0\\
0 & 0 &1
\end{bmatrix}^{-1}
\begin{bmatrix}
x\prime\\
y\prime\\
1
\end{bmatrix}
\)
最終的にどうする?
というわけで、
実施したいアフィン逆変換の逆行列を前方から配置していけばOK。
さらに結合法則から、前方の行列を先に合成して、そのあとにアフィン逆変換を一発だけ実施すればOK。
これを元に次回から実際にプログラミングしていく。
まとめ
- アフィン逆行列のアルゴリズムを使用している都合、逆行列の結合法則にも気を付ける必要がある。
- 「行列の積の逆行列」と「逆行列の積」の関係性を証明。
- 上記を利用して、アフィン逆変換の合成を各アフィン行列単体で管理できる形状に変形。
MATLAB、Python、Scilab、Julia比較ページはこちら
コメント