どこかのだれかへ

ボク、プログラマ。

3x3行列を3x2行列にするこによって逆行列の計算がすっきりした

二次元ベクトルにアフィン変換行列を適用するには、3x3行列使うのが通常です。

しかし古来よりゲーム開発ではメモリ節約のために単純に3x3行列を持たず、固定値である最右列を省略した3x2行列(float a[3][2])を使う場面があります。

僕はずっとメモリの節約のためだと思っていて、今の時代では単純に3x3行列や4x4行列を使えばいいと思っていましたが、先日3x2行列の逆行列を実装したところ、最右列が固定値(0, 0, 1)になっていることによって計算が非常にすっきりすることに気づき、感動しました。

3x3行列の逆行列の計算式は以下のようになります。

f:id:Tepp:20200717012912p:plain

これを3x2行列、つまりa13 = 0、a23 = 0、a33 = 1としした場合は以下のように変換できます。

f:id:Tepp:20200717012921p:plain

かなり数式がシンプルになったのが分かると思います。逆行列でも結果的に最右列が(0, 0, 1)になるため、省略して3x2行列で表せるのがいいですね。