ЧАВО по матрицам и кватернионам (2 стр)
Автор: Тимур Ж
АРИФМЕТИКА
Что такое единичная матрица?
Единичная матрица — матрица, имеющая равное число строк и столбцов. И все элементы с индексами i=j равны 1, остальные равны 0.
К примеру, единичная матрица 4х4:
\(M=\begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1
\end{pmatrix}\)
Что такое главная диагональ матрицы?
Главная диагональ матрицы - это набор элементов, у которых номер ряда равен номеру колонки, иначе говоря:
\(M_{i,j}\), где \(i=j\)
Так что у единичной матрицы, лишь элементы главной диагонали равны 1, а все остальные 0.
Что такое транспонирование матрицы?
Транспонированная матрица это матрица, в которой поменяли все элементы матрицы относительно главной диагонали.
Это можно выразить математической операцией вида:
\(M'_{i,j} = M_{j,i}\)
Однако такое можно сделать лишь с матрицей с равным числом строк и столбцов.
Если матрица M равна:
\(M=\begin{pmatrix}
0.707 & -0.866 \\
0.866 & 0.707
\end{pmatrix}\)
Транспонированная равна:
\(M=\begin{pmatrix}
0.707 & 0.866 \\
-0.866 & 0.707
\end{pmatrix}\)
Если имеется матрица поворота, то транспонирование гарантирует, что у матрицы есть обратная.
Как мне сложить две матрицы?
Правило сложения двух матриц: «добавь строку и колонку к строке и колонке».
Математически это выглядит так: \(R_{i,j}=M_{i,j}+L_{i,j}\)
При этом матрицы должны быть одного размера. К примеру, если матрица 3x3 M складывается с матрицей 3x3 L результат будет таким:
\(R = M + L =\) \(\begin{pmatrix}
A & B & C \\
D & E & F \\
G & H & I
\end{pmatrix} +\) \(\begin{pmatrix}
J & K & L \\
M & N & O \\
P & Q & R
\end{pmatrix} =\) \(\begin{pmatrix}
A+J & B+K & C+L \\
D+M & E+N & F+O \\
G+P & H+Q & I+R
\end{pmatrix}\).
Как мне вычесть две матрицы?
Правило вычитания двух матриц: «вычитай строку и колонку из строки и колонки».
Математически будет так: \(R_{i,j}=M_{i,j}-L_{i,j}\)
Матрицы должны быть строго одного размера.
К примеру, если матрица 3x3 L вычитается из матрицы 3x3 M результат будет таким:
\(R = M - L =\) \(\begin{pmatrix}
A & B & C \\
D & E & F \\
G & H & I
\end{pmatrix} -
\begin{pmatrix}
J & K & L \\
M & N & O \\
P & Q & R
\end{pmatrix} =\) \(\begin{pmatrix}
A-J & B-K & C-L \\
D-M & E-N & F-O \\
G-P & H-Q & I-R
\end{pmatrix}\).
Как мне умножить две матрицы?
Правило такое: «умножай строку на колонку и сумма будет результатом».
Математически: \(R_{i,j}=\sum_{i=1}^n M_{i,j} L_{j,i}\)
Если есть две матрицы:
\(M_{AB}\) и \(L_{CD}\), то величины B и C должны быть равны.
Результат будет \(R_{AD}\)
Так что, можно умножить матрицу 4xN с матрицей 4x4, но не наоборот. К примеру, если матрица 4x4 M описана так:
\(M=\begin{pmatrix}
A & B & C & D \\
E & F & G & H \\
I & J & K & L \\
M & N & O & P
\end{pmatrix}\)
и матрица 4x2 L описана так:
\(L=\begin{pmatrix} Q&R \\ S&T \\ U & V \\ W & X \end{pmatrix}\)
то размер результата будет 2x4:
\(R = M * L =\) \(\begin{pmatrix} A & B & C & D \\ E & F & G & H \\ I & J & K & L \\ M & N & O & P \end{pmatrix}* \begin{pmatrix} Q&R \\ S&T \\ U & V \\ W & X \end{pmatrix} =\) \(\begin{pmatrix} AQ+BS+CU+DW & AR+BT+CV+DX \\ EQ+FS+GU+HW & ER+FT+GV+HX \\ IQ+JS+KU+LW & IR+JT+KV+LX \\ MQ+NS+OU+PW & MR+NT+OV+PX \end{pmatrix}\)
Как мне взять корень или возвести матрицу в квадрат?
Из матрицы можно взять корень или возвести в целую степень. Однако есть несколько ограничений. Для любого возведения матрица должна быть квадратная, иначе говоря, количество столбцов должо быть равно количеству строк.
К примеру,
\(M^{-1}\) — обратная матрица,
\(M^0\) — единичная матрица,
\(M^1\) — матрица не меняется,
\(M^2\) — возводит в квадрат,
\(M^3\) — куб матрицы.
Возведение матрицы в степень больше одного означает умножить матрицу на себя n-число раз.
К примеру:
\(M^2 = M \times M\)
\(M^3 = M \times M \times M\)
и так далее.
Возведение в степень единичной матрицы всегда даёт единичную матрицу: \(I^n = I\)
Как мне умножить один и более векторов на матрицу?
Лучший способ выполнить это задание представить список векторов в виде одной матрицы, где каждый вектор представлен одной колонкой.
Если N векторов должны быть умножены на матрицу 4х4, они могут быть выражены в виде одной матрицы 4хN:
\(M=\begin{pmatrix}A & B & C & D \cr E & F & G & H \cr I & J & K & L \cr M & N & O & P\end{pmatrix}\)
а список векторов:
\(V=\begin{pmatrix}x_1&x_2&x_3&x_4&x_5\cr y_1&y_2&y_3&y_4&y_5\cr z_1&z_2&z_3&z_4&z_5\cr 1&1&1&1&1\end{pmatrix}\)
Заметьте, что вся дополнительная четвертая строка равна константе 1. Она не играет никакой роли, используется, чтобы порядок матрицы M совпадал с порядком списка V.
Умножение производится так:
\(M*V=V'\)
\(\begin{pmatrix}
A&B&C&D \cr E&F&G&H \cr I&J&K&L \cr M&N&O&P
\end{pmatrix} *
\begin{pmatrix}
x_1&x_2&x_3&x_4&x_5\cr y_1&y_2&y_3&y_4&y_5\cr z_1&z_2&z_3&z_4&z_5\cr 1&1&1&1&1
\end{pmatrix} =\) \(\begin{pmatrix}
A*x_1+B*y_1+C*z_1+D&A*x_2+B*y_2+C*z_2+D&...\cr E*x_1+F*y_1+G*z_1+H&E*x_2+F*y_2+G*z_2+H&...\cr
I*x_1+J*y_1+K*z_1+L& I*x_2+J*y_2+K*z_2+L&...\cr M*x_1+N*y_1+O*z_1+P&M*x_2+N*y_2+O*z_2+P&...
\end{pmatrix}\)
На каждый вектор в списке приходится в общем 12 умножений, 16 сложений и 1 деление для перспективы. Если известно, что это матрица поворота или переноса, то можно не делить.
#C++, #FAQ, #OpenGL, #кватернионы, #математика, #матрицы
9 марта 2011 (Обновление: 5 дек 2021)