Зачем 2D-преобразованиям нужны матрицы 3x3?

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

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

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

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

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

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

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

18
задан Mr.Pe 22 May 2012 в 12:09
поделиться