Warum benötigen 2D-Transformationen 3x3-Matrizen?

Ich möchte 2D-Zeichnungen machen und daher einige Matrixtransformationen implementieren. Mit meinem leichten mathematischen Hintergrund versuche ich zu verstehen, wie man das in C # macht (jede andere OOP-Sprache würde es offensichtlich tun).

Alles, was ich lese, ist zu erklären, dass wir mit 3x3-Matrizen arbeiten müssen, um mit den Übersetzungen fertig zu werden. Weil Sie mit Multiplikationen keine Übersetzung machen können. Dies geschieht jedoch mit Multiplikationen der Matrizen, die wir für unsere Transformationen verwenden. Also arbeiten wir mit etwas wie:

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

Ich verstehe den Mittelwert der dritten Spalte, aber warum brauchen wir die dritte Zeile? In einer Identitätsmatrix sowie in einer Rotation, Skalierung oder Rotation ist die letzte Zeile dieselbe. Gibt es Operationen, die ich noch nicht erreicht habe und die es brauchen werden? Liegt es daran, dass einige Sprachen (Java) bei Arrays mit "quadratischen Dimensionen" eine bessere Leistung erbringen? In diesem Fall kann ich in C # 3 Spalten und 2 Zeilen verwenden (da gezackte Arrays auch oder besser funktionieren).

Zum Beispiel habe ich für eine Rotation + Translation eine Matrix wie diese

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

Keine Notwendigkeit der letzten Reihe.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage