Зачем двумерным преобразованиям нужны матрицы 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  }

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

 Mr.Pe22 мая 2012 г., 11:30
@HighPerformanceMark Я пытаюсь объяснить, какой смысл этих понятий мне не понятен. Да, это 2 первых документа, с которых я начал читать.
 High Performance Mark22 мая 2012 г., 11:14
Начните читать сen.wikipedia.org/wiki/Translation_(geometry), затем перейдите по одной из ссылок наen.wikipedia.org/wiki/Homogeneous_coordinates

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

Ответ - однородные координаты. Чтобы объединить вращение и перемещение в одной операции, требуется одно дополнительное измерение, чем требует модель. Для плоских вещей это 3 компонента, а для пространственных вещей это 4 компонента. Операторы берут 3 компонента и возвращают 3 компонента, требующие матрицы 3x3.

 Mr.Pe22 мая 2012 г., 14:04
Но какова цель строки {0,0,1} в 2D? Мы можем рассчитать переводы, а также линейное преобразование без него. (Если я правильно понял)
 Mr.Pe22 мая 2012 г., 14:59
Я не думал о том, что нам это нужно для матричных операций; это "математическое ограничение"; Я не предвидел. (Извините за медлительность)
 22 мая 2012 г., 14:38
Как я уже сказал, 3-й ряд необходим для получения трехкомпонентного результата. Возможно, что третий компонент не всегда равен1 и 3-й ряд не[ 0 0 1 ] в других аффинных преобразованиях.
Решение Вопроса

this is with multiplications of the matrices that we create our transformations

This Вот почему мы хотим квадратные матрицы.

Предположим, мы сделали то, что вы предлагаете, и использовали матрицы 2x3 для наших преобразований.

Тогда вращение будет

( x1, x2, 0 )
( y1, y2, 0 )

и перевод будет

( 1, 0, tx )
( 0, 1, ty )

и мы могли бы выполнять либо вращения, либо переводы, умножив нашу матрицу на вектор столбца, представляющий точку:

    ( x )
M   ( y )
    ( 0 )

чтобы получить правильные ответы.

However - как бы мы пошлиcomposing преобразования? Действительно, для вашего & quot; для вращения + перевода у меня есть такая матрица & quot; пример, как тыget to эта матрица? Конечно, в этом случае вы можете просто написать это, но в целом? Ну, вы знаете ответ:

this is with multiplications of the matrices that we create our transformations

Так что должно быть возможноmultiply two transformation matrices to give another transformation matrix, И правила умножения матриц показывают, что это:

( . . . ) ( . . . )
( . . . ) ( . . . ) = ???

не является допустимым умножением матрицы. Нам нужны матрицы, которые можно умножить, чтобы наши преобразования были составными. Итак, у нас есть этот дополнительный ряд.

Теперь способ, которым я здесь выразил это, фактически полностью отстал от стандартного математического представления, в котором знакомые преобразования вращения и сдвига являются просто частными случаями полной степени однородных преобразований координат на проективной плоскости - но я думаю, это поможет показать вам, почему нам нужна эта дополнительная строка - чтобы матрица была квадратной, и, таким образом, ее можно умножить на одинаковые матрицы.

 22 февр. 2014 г., 14:12
И фактический расчет для перевода(tx,ty) похоже[x y 1] x [1 0 0; 0 1 0; tx ty 1] = [x+tx y+ty 1].
 Mr.Pe22 мая 2012 г., 14:33
Э-э, это то, чего я еще не видел! Спасибо тебе, АакашМ. Спасибо, что нашли время, чтобы обнаружить дыру в моем мышлении.
 31 окт. 2012 г., 20:03
+1 отличный ответ.

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