Способы представления поворотов матрицы поворота, ось угол, кватернион
Способы представления поворотов¶
Повороты в пространстве могут быть представлены различными способами. Наиболее часто используемые методы включают матрицы поворота, представление ось–угол и кватернионы.
1. Матрицы поворота¶
Математика: Матрица поворота в двумерном пространстве для угла \(\theta\) выглядит так:
\(\mathbf{R}(\theta) = \begin{pmatrix}\cos \theta & -\sin \theta \\\sin \theta & \cos \theta\end{pmatrix}\)
В трехмерном пространстве для поворота вокруг оси \(z\) на угол \(\theta\) матрица поворота будет:
\(\mathbf{R}_z(\theta) = \begin{pmatrix}\cos \theta & -\sin \theta & 0 \\\sin \theta & \cos \theta & 0\\0 & 0 & 1\end{pmatrix}\)
Код на Python:
import numpy as np
# Угол поворота в радианах
theta = np.radians(45)
# Матрица поворота для двумерного случая
R_2d = np.array([[np.cos(theta), -np.sin(theta)], [np.sin(theta), np.cos(theta)]])
# Матрица поворота для трехмерного случая вокруг оси z
R_3d = np.array([[np.cos(theta), -np.sin(theta), 0],
[np.sin(theta), np.cos(theta), 0],
[0, 0, 1]])
print("Матрица поворота 2D:")
print(R_2d)
print("Матрица поворота 3D вокруг оси z:")
print(R_3d)
2. Представление ось–угол¶
Математика: Поворот может быть описан углом \(\theta\) и осью \(\mathbf{u}\) (нормализованной вектором): \(\text{Поворот на угол } \theta \text{ вокруг оси } \mathbf{u} = \begin{pmatrix} u_x, u_y, u_z \end{pmatrix}\)
Код на Python:
import numpy as np
# Угол поворота в радианах
theta = np.radians(45)
# Ось вращения (нормализованный вектор)
u = np.array([0, 0, 1])
u = u / np.linalg.norm(u)
# Вычисление матрицы поворота с использованием ось-угол представления
K = np.array([[0, -u[2], u[1]],
[u[2], 0, -u[0]],
[-u[1], u[0], 0]])
R = np.eye(3) + np.sin(theta) * K + (1 - np.cos(theta)) * np.dot(K, K)
print("Матрица поворота (ось-угол):")
print(R)
3. Кватернионы¶
Математика: Кватернион для поворота на угол \(\theta\) вокруг оси \(\mathbf{u}\) задается как: \(q = \cos\left(\frac{\theta}{2}\right) + \mathbf{u} \sin\left(\frac{\theta}{2}\right)\) где \(\mathbf{u} = u_x \mathbf{i} + u_y \mathbf{j} + u_z \mathbf{k}\)
Код на Python:
import numpy as np
# Угол поворота в радианах
theta = np.radians(45)
# Ось вращения (нормализованный вектор)
u = np.array([0, 0, 1])
u = u / np.linalg.norm(u)
# Кватернион
w = np.cos(theta / 2)
x, y, z = u * np.sin(theta / 2)
q = np.array([w, x, y, z])
print("Кватернион:")
print(q)
# Преобразование кватерниона в матрицу поворота
q0, q1, q2, q3 = q
R = np.array([[1 - 2*(q2**2 + q3**2), 2*(q1*q2 - q0*q3), 2*(q1*q3 + q0*q2)],
[2*(q1*q2 + q0*q3), 1 - 2*(q1**2 + q3**2), 2*(q2*q3 - q0*q1)],
[2*(q1*q3 - q0*q2), 2*(q2*q3 + q0*q1), 1 - 2*(q1**2 + q2**2)]])
print("Матрица поворота из кватерниона:")
print(R)
Эти методы позволяют представлять и использовать повороты в различных приложениях, таких как компьютерная графика, робототехника и физическое моделирование.