Por que as transformações 2D precisam de matrizes 3x3?

Eu quero fazer algum desenho 2D e, portanto, quero implementar algumas transformações matriciais. Com meu histórico de matemática leve, estou tentando entender como fazê-lo em C # (qualquer outra linguagem oop faria isso obviamente).

Tudo o que li é explicar que precisamos trabalhar com matrizes 3x3 para poder lidar com as traduções. Porque você não pode fazer traduções com multiplicações. Mas isso é com multiplicações das matrizes que criamos nossas transformações. Então trabalhamos com algo como:

{ x1, x2, tx }
{ y1, y2, ty }
{ 0,  0,  1  }

Eu entendo a média da terceira coluna, mas por que precisamos da terceira linha? Em uma matriz de identidade, bem como em uma rotação, escala ou rotação, a última linha é a mesma. Existem operações que ainda não cheguei e que serão necessárias? É porque algumas linguagens (Java) funcionam melhor com arrays "dimensões quadradas"? Se assim for eu posso usar 3 colunas e 2 linhas em c # (desde arrays irregulares funciona tão bem ou melhor).

Por exemplo, para uma rotação + tradução eu tenho uma matriz como esta

{ cos(rot)*x1, (-sin(rot))*x2, tx }
{ sin(rot)*y1, cos(rot)*y2,    ty }
{ 0,           0,              1  }

Não há necessidade da última linha.

questionAnswers(2)

yourAnswerToTheQuestion