Список постов с меткой "линейная алгебра" (полезные материалы по линейной алгебре)

Что такое матрица 4×4 в трехмерных играх?

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

Ну согласитесь — нормального человека нельзя заставить умножать и складывать 32 числа непонятно для какой цели.. Тупо делать это только ради оценки в журнале. Я так не умею, а Вы?

Итак, что же такое матрица 4×4? Какую роль она играет в трехмерных играх? Зачем эти 16 чисел складывать и умножать? СКАНДАЛЫ, ИНТРИГИ, РАССЛЕДОВАНИЯ.. Читайте дальше в моем журнале после короткой рекламы.

Рассмотрим абстрактную матрицу, в которой злой гений зашифровал положение объекта в трехмерном мире:

M=\begin{bmatrix}A&E&I&M\\B&F&J&N\\C&G&K&O\\D&H&L&P\end{bmatrix}

Начнем расшифровку.. В матрице присутствуют три вектора, вот они перед Вами:

\vec{X}=(A, B, C)
\vec{Y}=(E, F, G)
\vec{Z}=(I, J, K)

Как нетрудно догадаться, это вектора осей системы координат. Длина этих векторов — это масштаб объект вдоль каждого вектора. Если совсем дотошно, то это базисные векторы новой системы координат \vec{i}, \vec{j} и \vec{k} умноженные на масштаб вдоль каждой оси.

Рассмотрим такую матрицу:

M=\begin{bmatrix}2&0&0&M\\0&3&0&N\\0&0&0.5&O\\D&H&L&P\end{bmatrix}

Что следует из этой матрицы? Во-первых, по X объект увеличен в два раза, по Y в три раза, по Z уменьшен в два раза, направление системы координат не менялось.

Смотрим дальше. Числа M, N и O — это смещение объекта вдоль этих векторов (по X, Y и Z соответственно).

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

Ссылка на подробный обзор матриц и операций на ними из комментариев: http://www.opengl-tutorial.org/ru/beginners-tutorials/tutorial-3-matrices/ и видео по теме:

Определитель матрицы 3×3

Определитель матрицы 3×3 вычисляется следующим образом:

\Delta(A)=\begin{bmatrix}a_{11}&a_{12}&a_{13}\\a_{21}&a_{22}&a_{23}\\a_{31}&a_{32}&a_{33}\end{bmatrix}=a_{11}\begin{bmatrix}a_{22}&a_{23}\\a_{32}&a_{33}\end{bmatrix}-a_{12}\begin{bmatrix}a_{21}&a_{23}\\a_{31}&a_{33}\end{bmatrix}+a_{13}\begin{bmatrix}a_{21}&a_{22}\\a_{31}&a_{32}\end{bmatrix}=a_{11}(a_{22}a_{33}-a_{23}a_{32})-a_{12}(a_{23}a_{33}-a_{23}a_{31})+a_{13}(a_{21}a_{32}-a_{22}a_{31})

Если представить себе матрицу, как три вектора \vec{X}=\begin{bmatrix}a_{11}\\a_{12}\\a_{13}\end{bmatrix}, \vec{Y}=\begin{bmatrix}a_{21}\\a_{22}\\a_{23}\end{bmatrix} и \vec{Z}=\begin{bmatrix}a_{31}\\a_{32}\\a_{33}\end{bmatrix}, которые являются сторонами трёхмерного куба, то определитель — это изменение объёма куба по сравнению с таким же кубом от единичной матрицы.

Подробнее в видео:

Операции над точками и векторами

Операции над точками:

  • расстояние между точками \sqrt{(x_a-x_b)^2+(y_a-y_b)^2+(z_a-z_b)^2}

Операции над векторами:

  • длина \left|\vec{v}\right|=\sqrt{x^2+y^2+z^2}
  • скалярное произведение n=(\vec{a}, \vec{b})=|\vec{a}|* |\vec{b}|*cos\angle(\vec{a},\vec{b}) = x_a x_b + y_a y_b + z_a z_b, где n длина проекции вектора \vec{a} на вектор \vec{b}
  • векторное произведение \vec{c}=(y_a z_b-z_a y_b;z_a x_b-x_a z_b;x_a y_b-y_a x_b), где \vec{c} перпендикуляр к плоскости, которую образуют \vec{a} и \vec{b}
  • сложение векторов \vec{a}+\vec{b}=(x_a+x_b;y_a+y_b;z_a+z_b)
  • вычитание векторов \vec{a}-\vec{b}=(x_a-x_b;y_a-y_b;z_a-z_b)
Личный блог Евгения Жирнова