Dlaczego transformacje 2D wymagają macierzy 3x3?

Chcę zrobić rysunek 2D i tym samym zaimplementować pewne transformacje macierzy. W moim lekkim tle matematyki próbuję zrozumieć, jak to zrobić w języku C # (każdy inny język oop zrobiłby to oczywiście).

Czytam tylko, że musimy pracować z matrycami 3x3, aby móc radzić sobie z tłumaczeniami. Ponieważ nie możesz wykonać tłumaczenia z mnożeniem. Ale to dzięki mnożeniom macierzy, które tworzymy w naszych transformacjach. Pracujemy więc z czymś takim jak:

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

Rozumiem znaczenie trzeciej kolumny, ale dlaczego potrzebujemy trzeciego rzędu? W macierzy tożsamości, a także w obrocie, skali lub obrocie ostatni wiersz jest taki sam. Czy są jeszcze operacje, do których jeszcze nie dotarłem? Czy dlatego, że niektóre języki (Java) radzą sobie lepiej z macierzami „kwadratowych wymiarów”? Jeśli tak, mogę użyć 3 kolumn i 2 wierszy w C # (ponieważ poszarpane macierze działają równie dobrze lub lepiej).

Na przykład dla rotacji + tłumaczenia mam taką macierz

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

Nie ma potrzeby ostatniego rzędu.

questionAnswers(2)

yourAnswerToTheQuestion