バックナンバーはこちら。
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
追加で証明?

アフィン行列の合成ができるってわかったから、
次は実際にプログラムで組んでみる感じかな。

ちょっと待った!

(まだあるんか・・・。)

アフィン変換としてはOKなのだが、
今回、我々が実際に利用しているのはアフィン逆変換のアルゴリズムだ。

まぁ、そうなんだろうけど、そこになんの問題があるの?

渡してる行列がアフィン行列じゃなくて、アフィン逆行列になってる。

それでも行列である以上、結合法則は成立するんじゃないの?
アフィン行列を合成することを想定したアフィン逆変換

結合法則は成立する。
問題は、結合済み行列全体に対して逆行列をしているので、
行列単体で見た場合にどうなるかわからない。
試しに移動後に回転するアフィン逆変換の式を見てみよう。
\(
\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}
\)

我々としては、移動アフィン行列と、回転アフィン行列は個別に管理したい。

まぁ言わんとすることはわかる。

というわけで、行列の積の逆行列についても確認が必要になる。

行列の積の逆行列?

要は、二つの行列の積をまとめて逆行列にするパターンと、
個別に逆行列にした上で行列の積を実施するパターンの関係性だな。

普通に逆行列したものを書ければよいんじゃないの?

そうとは限らない。
その点を事前に確認&証明しておく必要がある。

(マジめんどくせぇ・・・。)
まとめ

まとめだよ。
- アフィン逆行列のアルゴリズムを使用している都合、逆行列の結合法則にも気を付ける必要がある。
- アフィン行列の結合を想定したアフィン逆変換の式を書き出し。
- 行列結合後に逆行列する分には問題なさそうだが、個別に行列を管理する場合はいろいろ確認&証明が必要そう。
バックナンバーはこちら。
コメント