Тригонометрия
Тригонометрия и вращения в 3D
Кватернионы - расширение комплексных чисел для 3D вращений. Используются в каждом 3D движке (Unity, Unreal, ROS для роботов), каждой камере смартфона, в спутниковой навигации. Аполлон-13 едва не потерялся в космосе из-за gimbal lock - проблемы, которую кватернионы решают элегантно.
- Unity и Unreal Engine: Quaternion.Slerp для плавной анимации персонажей без рывков
- ROS (Robot Operating System): tf2 использует кватернионы для всех трансформаций систем координат
- IMU датчики: гироскоп в смартфоне выдаёт угловую скорость, AHRS интегрирует её в кватернион
- SLAM (Simultaneous Localization and Mapping): поза робота = позиция + кватернион ориентации
Предварительные знания
Матрицы вращения SO(3): геометрия преобразований
Кватернионы используются в каждом 3D движке: Unity, Unreal, ROS для роботов. Это расширение комплексных чисел для 3D-вращений, найденное Гамильтоном в 1843 году. Прежде чем понять кватернионы, нужно понять, что они решают - проблему gimbal lock в матрицах вращения.
**Группа SO(3)** - все матрицы вращения в 3D: R ∈ SO(3) тогда и только тогда, когда Rᵀ·R = I и det(R) = +1 **Базовые повороты вокруг осей:** Rx(α) = [[1,0,0],[0,cos α,-sin α],[0,sin α,cos α]] Ry(β) = [[cos β,0,sin β],[0,1,0],[-sin β,0,cos β]] Rz(γ) = [[cos γ,-sin γ,0],[sin γ,cos γ,0],[0,0,1]] **Формула Родрига:** R = I + sin(θ)K + (1-cos θ)K² где K - кососимметрическая матрица оси вращения n̂.
R1 = Rz(90°)·Rx(30°) и R2 = Rx(30°)·Rz(90°). Это одно и то же вращение?
SO(3) некоммутативна: Rz(90°)·Rx(30°) ≠ Rx(30°)·Rz(90°). Физически: сначала повернуть голову, потом наклонить ≠ сначала наклонить, потом повернуть. Исключение: вращения вокруг одной оси коммутируют.
Углы Эйлера и gimbal lock: почему НАСА теряло спутники
Аполлон-13 едва не потерялся в космосе из-за gimbal lock в инерциальной навигационной системе. Углы Эйлера (yaw/pitch/roll) интуитивны, но при pitch = 90° теряется одна степень свободы - два кольца гироскопа совмещаются в одну плоскость.
**ZYX-конвенция (aerospace):** R = Rz(ψ) · Ry(θ) · Rx(φ) ψ - yaw (рыскание, вокруг Z) θ - pitch (тангаж, вокруг Y) φ - roll (крен, вокруг X) **Gimbal lock при θ = ±90°:** Ry(90°) = [[0,0,1],[0,1,0],[-1,0,0]] При этом Rz(ψ)·Ry(90°)·Rx(φ) зависит только от (ψ - φ), а не от ψ и φ по отдельности. Одна степень свободы потеряна.
Gimbal lock при pitch = 90°: почему теряется одна степень свободы?
Ry(90°) отображает Z → −X. В Rz(ψ)·Ry(90°)·Rx(φ) вращения вокруг Z и X оказываются в одной плоскости. Якобиан отображения (ψ,θ,φ) → матрица теряет ранг: ψ и φ входят только через разность (ψ−φ). Кватернионы решают это - нет особых точек.
Кватернионы: 4 числа вместо 9 без gimbal lock
Unity, Unreal, Blender - все хранят ориентацию в кватернионах. Четыре числа (w, x, y, z) полностью описывают 3D-вращение без особых точек. Интерполяция через SLERP обеспечивает плавную анимацию с постоянной угловой скоростью.
**Кватернион вращения** на угол θ вокруг единичной оси n̂: q = cos(θ/2) + sin(θ/2)·(nₓi + nᵧj + n_zk) или в форме (w, x, y, z): w = cos(θ/2), (x,y,z) = sin(θ/2)·n̂ **Применение к вектору v:** v' = q · (0+v) · q* (через умножение кватернионов) **SLERP** (Spherical Linear intERPolation): slerp(q₁, q₂, t) = q₁·(q₁⁻¹·q₂)^t, t ∈ [0,1] **q и -q описывают одно вращение** (двойное покрытие SO(3) группой SU(2)).
Почему кватернион q и −q описывают одно и то же вращение?
(−q)·v·(−q)* = (−q)·v·(−q*) = (−1)²·(q·v·q*) = q·v·q*. Кватернион кодирует ось и half-angle: θ+2π меняет знак всего q, но вращение то же. Поэтому SU(2) → SO(3) - двулистное покрытие: двум кватернионам (q и −q) соответствует одна матрица вращения.
Ключевые идеи
- SO(3): R ∈ SO(3) тогда и только тогда, когда RᵀR = I и det(R) = +1; вращения некоммутативны
- Формула Родрига: R = I + sin(θ)K + (1-cos θ)K² - вращение вокруг произвольной оси через одну формулу
- Gimbal lock при pitch = 90°: Rz и Rx действуют в одной плоскости, ранг якобиана падает до 2
- Кватернион вращения: q = [cos(θ/2), sin(θ/2)·n̂], |q| = 1; q и -q описывают одно вращение
- SLERP: равномерная интерполяция по геодезической на 3-сфере - стандарт для анимации в game engines
Связанные темы
3D вращения объединяют тригонометрию, линейную алгебру и комплексный анализ:
- Сферическая тригонометрия — Кватернионы живут на 3-сфере S³; slerp - геодезическая на ней
- SVD и линейные преобразования — Матрицы вращения SO(3) - частный случай ортогональных матриц из SVD