.. role:: blue :class: blue Расширенная матрица в трёхмерном пространстве MbMatrix3D =========================================================== .. _MbMatrix3D_Extended_Matrix_in_Three-Dimensional_Space: .. версия ядра: 118059 Класс :blue:`MbMatrix3D` объявлен в файле *mb_matrix3d.h*. В трёхмерном пространстве матрица :blue:`MbMatrix3D` описывает преобразование из одной системы координат в другую. Матрица имеет размерность четыре на четыре. Пусть в выбранной системе координат построена локальная аффинная система координат с началом в точке **r** с координатами *r*\ :sub:`1`, *r*\ :sub:`2`, *r*\ :sub:`3` и базисными векторами **a** = \[*a*\ :sub:`1` *a*\ :sub:`2` *a*\ :sub:`3`\], **b** = \[*b*\ :sub:`1` *b*\ :sub:`2` *b*\ :sub:`3`\], **c** = \[*c*\ :sub:`1` *c*\ :sub:`2` *c*\ :sub:`3`\]. Векторы **a**, **b**, **c** должны быть линейно независимыми, но могут быть не ортогональными друг другу и иметь произвольную длину. Матрица :blue:`MbMatrix3D` преобразования координат из локальной системы в выбранную систему координат имеет вид: .. math:: :nowrap: \[ \mathbf{M} = \begin{bmatrix} a_{1} & a_{2} & a_{3} & 0 \\ b_{1} & b_{2} & b_{3} & 0 \\ c_{1} & c_{2} & c_{3} & 0 \\ r_{1} & r_{2} & r_{3} & 1 \\ \end{bmatrix}. \] Для обозначения расширенных матриц в трёхмерном пространстве будем использовать прописные буквы латинского алфавита, выделенные полужирным шрифтом, например **M**. Заметим, что каждому базисному вектору **a**, **b**, **c** и начальной точке **r** локальной системы координат соответствует своя строка в матрице преобразования из локальной системы в выбранную систему координат. Матрица :blue:`MbMatrix3D` является расширенной и работает с однородными радиусами-векторами и однородными векторами :blue:`MbHomogeneous3D` в трёхмерном пространстве. При преобразовании радиуса-вектора :ref:`MbCartPoint3D ` по матрице :blue:`MbMatrix3D` точке следует добавить четвёртую координату, равную единице. Пусть точка с координатами *x*\ :sub:`1`, *x*\ :sub:`2`, *x*\ :sub:`3` в локальной системе координат имеет координаты *p*\ :sub:`1`, *p*\ :sub:`2`, *p*\ :sub:`3` в выбранной системе координат, тогда при участии расширенной матрицы :blue:`MbMatrix3D` координаты будут связаны соотношением .. math:: :nowrap: \[ \begin{bmatrix} p_{1} & p_{2} & p_{3} & 1 \\ \end{bmatrix} = \begin{bmatrix} x_{1} & x_{2} & x_{3} & 1 \\ \end{bmatrix} \cdot \begin{bmatrix} a_{1} & a_{2} & a_{3} & 0 \\ b_{1} & b_{2} & b_{3} & 0 \\ c_{1} & c_{2} & c_{3} & 0 \\ r_{1} & r_{2} & r_{3} & 1 \\ \end{bmatrix}. \] Заметим, что трёхмерный радиус-вектор умножается на расширенную матрицу :blue:`MbMatrix3D` справа. При преобразовании вектора :ref:`MbVector3D ` по матрице :blue:`MbMatrix3D` вектору следует добавить четвёртую компоненту, равную нулю. Пусть вектор с компонентами *y*\ :sub:`1`, *y*\ :sub:`2`, *y*\ :sub:`3` в локальной системе координат имеет компоненты *v*\ :sub:`1`, *v*\ :sub:`2`, *v*\ :sub:`3` в выбранной системе координат, тогда при участии расширенной матрицы :blue:`MbMatrix3D` компоненты будут связаны соотношением .. math:: :nowrap: \[ \begin{bmatrix} v_{1} & v_{2} & v_{3} & 0 \\ \end{bmatrix} = \begin{bmatrix} y_{1} & y_{2} & y_{3} & 0 \\ \end{bmatrix} \cdot \begin{bmatrix} a_{1} & a_{2} & a_{3} & 0 \\ b_{1} & b_{2} & b_{3} & 0 \\ c_{1} & c_{2} & c_{3} & 0 \\ r_{1} & r_{2} & r_{3} & 1 \\ \end{bmatrix}. \] Заметим, что трёхмерный вектор умножается на расширенную матрицу :blue:`MbMatrix3D` справа.