Ответ 1
Это не так сложно понять, если вы разбираетесь в умножении матриц. Предположим, вы указываете x
/a\
\b/,
и вы хотите повернуть систему координат на A
:
/3 4\
\5 6/
и и "переместить его" t
/2\
\2/.
Последние матрицы являются компонентами аффинного преобразования, чтобы получить новую точку y
:
y = A*x + t = <a'; b'>T //(T means transposed).
Как вы знаете, чтобы получить это, можно построить 3d-матрицу B
и вектор x'
выглядящий как
/3 4 2\ /a\
B = |5 6 2| , x' = |b|
\0 0 1/ \1/
такой, что
/a'\
y' = |b'| = B*x'
\ 1/
из которого вы можете извлечь y
. Давайте посмотрим, как это работает. В исходном преобразовании (с использованием сложения) первым шагом будет выполнение умножения, т.е. вращающаяся часть y_r
:
y_r = A*x = <3a+4b; 5a+6b>T
Затем вы добавляете "абсолютную" часть:
y = y_r + t = <3a+4b+2; 5a+6b+2>T
Теперь посмотрим, как работает B
Я буду вычислять y'
строка за строкой:
1) a' = 3*a + 4*b + 2*1
2) b' = 5*a + 6*b + 2*1
3) the rest: 0*a + 0*b + 1*1 = 1
Как раз то, что мы ожидали. Сначала вычисляется часть вращения - сложение и умножение. Затем добавляется x-часть поступательной части, умноженная на 1
--it, остается неизменной. То же самое для второго ряда.
В третьей строке a
и b
отбрасываются (умножается на 0
). Последняя часть остается неизменной и составляет 1
. Итак, все, что касается последней строки, это "сбросить" значения точки и сохранить 1
.
Таким образом, можно утверждать, что для этого будет достаточно матрицы 2х3. Это частично верно, но имеет один существенный недостаток: вы теряете способность к компоновке. Предположим, что вы в основном удовлетворены B
, но хотите отразить одну координату. Затем вы можете выбрать другую матрицу преобразования
/-1 0 0\
C = | 0 1 0|
\ 0 0 1/
и иметь результат
y'' = C*B*x' = <-3a+4b+2; 5a+6b+2; 1>T
Это простое умножение не может быть сделано так просто с матрицами 2х3, просто из-за свойств умножения матриц.
В принципе, в приведенном выше примере последняя строка (XXX
) также может быть чем-либо еще вида <0;0;x>
. Это было просто, чтобы отбросить баллы. Тем не менее, точно так же, как это необходимо, чтобы сделать композицию путем умножения.
Наконец, в данном случае википедия кажется мне достаточно информативной.