Зачем двумерным преобразованиям нужны матрицы 3х3?

Я хочу сделать 2D-рисунок и, следовательно, хочу реализовать некоторые преобразования матрицы. Имея небольшой опыт работы с математикой, я пытаюсь понять, как это сделать в C # (очевидно, что любой другой язык oop сделал бы это).

Все, что я прочитал, объясняет, что нам нужно работать с матрицами 3х3, чтобы справиться с переводами. Потому что вы не можете сделать перевод с умножением. Но это с умножением матриц, которые мы создаем наши преобразования. Итак, мы работаем с чем-то вроде:

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

Я понимаю среднее значение третьего столбца, но зачем нам третий ряд? В единичной матрице, а также в повороте, масштабе или повороте последний ряд одинаков. Есть ли операции, которых я еще не достиг, которые будут нужны? Это потому, что некоторые языки (Java) работают лучше с «квадратом измерений» массивы? Если это так, я могу использовать 3 столбца и 2 строки в C # (поскольку неровные массивы работают так же или лучше).

Например, для вращения + перевода у меня есть такая матрица

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

Нет необходимости в последнем ряду.

Ответы на вопрос(2)

Ваш ответ на вопрос