Что означает матрица*вектор в отличие от вектор*матрица

если я делаю positionVector*worldMatrix, позиция преобразуется в мировое пространство. Но что произойдет, если я сделаю это наоборот (worldMatrix*positionVector) с точки зрения 3D-пространства?

Я заметил, что результат отличается от первого. Про матрицу я уже гуглил, математика они многое объясняют, но не эту, по крайней мере я не нашел.


person codymanix    schedule 25.02.2009    source источник


Ответы (4)


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

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

В качестве примера рассмотрим ящик, ориентированный произвольно в мире - умножение на обратное преобразование мира может (конечно, полностью зависит от приложения :)) поместить вас в пространство, где оно выровнено по оси, и если вы заинтересованы в поиске столкновений с другие объекты, выполняющие вычисления в локальном пространстве блока, упростили бы эту задачу.

person Andrew Khosravian    schedule 25.02.2009
comment
Вы говорите, что инверсия (мат) - это то же самое, что и транспонирование (мат)? Я не могу найти никаких доказательств этого, так как это противоречит моим школьным знаниям. - person codymanix; 25.02.2009
comment
В общем, транспонирование не то же самое, что инверсия. Это особое свойство ортогональных матриц (см. ссылку в моем ответе для более подробной информации), которым являются все матрицы вращения и отражения. - person Andrew Khosravian; 25.02.2009

В matrixvector ваш вектор будет интерпретироваться как вектор-столбец. В векторнойматрице он будет интерпретироваться как вектор-строка. 2x2 примеры:

/ a b \   / e \   / ae+bf \
|     | * |   | = |       |
\ c d /   \ f /   \ ce+df /

          / a b \
( e f ) * |     | = ( ea+fc eb+fd )
          \ c d /

Как видите, результат разный.

Между прочим, выполнение одного из них такое же, как выполнение другого после транспонирования матрицы.

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

person Thomas    schedule 25.02.2009

(матрица * вектор) эквивалентно (вектор * транспонировать (матрица))

person Simon C.    schedule 25.02.2009

Матричные математические правила:

Даны матрицы A и B размеров MxN и OxP,

  • Произведение матриц A * B определено, только если N=O.
  • В результате получится матрица размером MxP.

Другое важное правило состоит в том, что умножение матриц не является коммутативным. A * B != B * A

Обычно в компьютерной графике вектор положения представляет собой матрицу 4x1, а матрица мировоззрения - квадратная, 4x4. Таким образом, вы должны ожидать, что предварительное умножение матрицы мировоззрения на вектор положения будет неопределенным. Правильный способ применить матрицу мировоззрения к вектору положения — в другом порядке, предварительно умножив вектор положения на матрицу мировоззрения. (Я говорю математически, здесь)

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

person Scottie T    schedule 25.02.2009
comment
Спасибо за ссылку, но в HLSL (языке шейдеров) есть функция mul(mat, vec), а также mul(vec,mat). В одном vec интерпретируется как вектор-столбец, а в другом — как вектор-строка. - person codymanix; 25.02.2009
comment
Да, любая хорошая графическая библиотека/язык должна иметь функцию, позволяющую сделать это за вас, но полезно знать, что находится внутри этой функции. - person Scottie T; 25.02.2009