バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia3-backnumber/
はじめに
アフィン変換のアフィン行列は合成できる。
いままで証明してきたものを組み合わせる。
登場人物
博識フクロウのフクさん
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
いままで証明してきたもの。
なんか、証明ばっかりしてたから、
なにをどうしたか忘れかけてるな・・・。
ならば、ここで一度再掲しておこう。
まずは、やりたいアフィン変換
\(
\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。
ってことか
そうそう。
これを次回から実際にプログラミングしていく。
まとめ
まとめだよ。
- いままで証明してきたものを再確認。
- 上記を利用して、アフィン逆変換の合成を各アフィン行列単体で管理できる形状に変形。
バックナンバーはこちら。
コメント