Вращение фигуры в пространстве

Поворот в 3D графике является одним из основных инструментов для манипуляции объектами в пространстве. Он позволяет изменять ориентацию объекта, рассматривать его с разных сторон, получать разные виды проекций. Это играет большую роль при визуалиазации и анимации объектов, придания им реалистичного вида.

Вращение фигуры в пространстве на сайте cgraph.ru

Математически формулу поворота, как и многие другие преобразования объекта в пространстве, удобнее описывать с помощью матриц.

Матрицей поворота (или матрицей направляющих косинусов) называется ортогональная матрица, которая используется для выполнения собственного ортогонального преобразования в евклидовом пространстве. При умножении любого вектора на матрицу поворота длина вектора сохраняется. Определитель матрицы поворота равен единице.

Матрицы вращения вокруг оси декартовой системы координат на угол α в трёхмерном пространстве следующие -

Матрица вращения вокруг оси OX:
$$
M_x(\alpha ) = \begin{bmatrix}
1 & 0 & 0 \\
0 & cos (\alpha) & -sin(\alpha) \\
0 & sin (\alpha) & cos (\alpha) \\
\end{bmatrix}
$$

Матрица вращения вокруг оси OY:
$$
M_y(\alpha ) = \begin{bmatrix}
cos (\alpha) & 0 & sin(\alpha) \\
0 & 1 & 0 \\
-sin(\alpha) & 0 & cos (\alpha) \\
\end{bmatrix}
$$

Матрица вращения вокруг оси OZ:
$$
M_z(\alpha ) = \begin{bmatrix}
cos (\alpha) & -sin(\alpha) & 0 \\
sin(\alpha) & cos (\alpha) & 0 \\
0 & 0 & 1 \\
\end{bmatrix}
$$

Любое вращение в трехмерном пространстве может быть представлено как композиция поворотов вокруг трех ортогональных осей (например, вокруг осей декартовых координат). Этой композиции соответствует матрица, равная произведению соответствующих трех матриц поворота.

$$
M=M_{x}(\alpha )*M_{y}(\beta )*M_{z}(\gamma )=\\
={\begin{pmatrix}1&0&0\\0&\cos \alpha &-\sin \alpha \\0&\sin \alpha &\cos \alpha \end{pmatrix}}{\begin{pmatrix}\cos \beta &0&\sin \beta \\0&1&0\\-\sin \beta &0&\cos \beta \end{pmatrix}}{\begin{pmatrix}\cos \gamma &-\sin \gamma &0\\\sin \gamma &\cos \gamma &0\\0&0&1\end{pmatrix}}=\\
={\begin{pmatrix}\cos \beta \cos \gamma &-\sin \gamma \cos \beta &\sin \beta \\\sin \alpha \sin \beta \cos \gamma +\sin \gamma \cos \alpha &-\sin \alpha \sin \beta \sin \gamma +\cos \alpha \cos \gamma &-\sin \alpha \cos \beta \\\sin \alpha \sin \gamma -\sin \beta \cos \alpha \cos \gamma &\sin \alpha \cos \gamma +\sin \beta \sin \gamma \cos \alpha &\cos \alpha \cos \beta \end{pmatrix}}
$$

Таким образом, любой поворот вектора P(x,y,z) в пространстве можно выполнить, умножив его на матрицу M:

$$
P' = P\cdot M
$$

Для использования матрицы поворота совместно с другими элементарными преобразованиями объекта, необходимо перейти к однородным координатам, а сами матрицы увеличить в размерности до 4x4:
$$
M = \begin{bmatrix}
\cdots & \cdots & \cdots & 0 \\
\cdots & \cdots & \cdots & 0 \\
\cdots & \cdots & \cdots & 0 \\
0 & 0 & 0 & 1 \\
\end{bmatrix}
$$
Если преобразовать матричные операции в формулы в явном виде, то

поворот по оси OX:
$
x'=x;\\
y'=y\cdot cos(\alpha)-z\cdot sin(\alpha) ;\\
z'=y\cdot sin(\alpha)+z\cdot cos(\alpha) ;\\
$

поворот по оси OY:
$
x'=x\cdot cos(\alpha)+z\cdot sin(\alpha);\\
y'=y;\\
z'=-x\cdot sin(\alpha)+z\cdot cos(\alpha);\\
$

поворот по оси OZ:
$
x'=x\cdot cos(\alpha)-y\cdot sin(\alpha);\\
y'=x\cdot sin(\alpha)+y\cdot cos(\alpha);\\
z'=z;\\
$

Использовать данные формулы необходимо последовательно друг за другом, т.е. если надо повернуть объект вокруг осей OX и OY, вначале делается поворот вокруг оси OX, потом применительно к полученному результату делается поворот вокруг оси OY.