EssayAI
Блог
Блог
Математика и алгоритмы

Формула Родрига: поворот вектора вокруг оси

11 июня 2026Время чтения: 7 минут
#формула родрига#поворот вектора#матрица поворота#линейная алгебра#векторное произведение

Формула Родрига - это компактный способ повернуть вектор v\mathbf{v} вокруг произвольной единичной оси k\mathbf{k} на угол θ\theta без явного перебора координатных плоскостей. Её применяют в компьютерной графике, робототехнике, механике твёрдого тела и задачниках по линейной алгебре - везде, где нужно описать поворот в пространстве одной формулой. Попробуйте калькулятор ниже: задайте угол и вектор - и сразу увидите результат с разбивкой по трём слагаемым формулы.

Что такое формула Родрига

Формула Родрига записывается так:

v=vcosθ+(k×v)sinθ+k(kv)(1cosθ),\mathbf{v}' = \mathbf{v}\cos\theta + (\mathbf{k} \times \mathbf{v})\sin\theta + \mathbf{k}(\mathbf{k} \cdot \mathbf{v})(1 - \cos\theta),

где v\mathbf{v} - исходный вектор, k\mathbf{k} - единичная ось вращения (k=1|\mathbf{k}| = 1), θ\theta - угол поворота, v\mathbf{v}' - результат.

У формулы три слагаемых, и каждое отвечает за свою часть поворота:

  • vcosθ\mathbf{v}\cos\theta - проекция исходного вектора, «прижатая» к плоскости вращения, уменьшенная на cosθ\cos\theta;
  • (k×v)sinθ(\mathbf{k} \times \mathbf{v})\sin\theta - вращение на 90°90° в плоскости, ортогональной оси, умноженное на sinθ\sin\theta;
  • k(kv)(1cosθ)\mathbf{k}(\mathbf{k} \cdot \mathbf{v})(1 - \cos\theta) - компенсация проекции вектора на ось, которая не меняется при повороте.

Если v\mathbf{v} перпендикулярен оси k\mathbf{k}, то kv=0\mathbf{k} \cdot \mathbf{v} = 0 и третье слагаемое исчезает. Формула сводится к обычному повороту в плоскости: vcosθ+(k×v)sinθ\mathbf{v}\cos\theta + (\mathbf{k} \times \mathbf{v})\sin\theta.

Вектор v (синий) вращается вокруг оси k = (0,0,1) от 0° до 360°. Дуга угла theta нарастает одновременно с поворотом - видно, как первое слагаемое (косинусная компонента) убывает, а второе (синусная, зелёное) растёт до 90° и затем убывает

Вывод формулы

Разложим v\mathbf{v} на два ортогональных слагаемых: проекцию на ось v=k(kv)\mathbf{v}_\parallel = \mathbf{k}(\mathbf{k} \cdot \mathbf{v}) и компоненту, перпендикулярную оси, v=vv\mathbf{v}_\perp = \mathbf{v} - \mathbf{v}_\parallel.

При повороте на угол θ\theta вокруг k\mathbf{k}:

  • v\mathbf{v}_\parallel не меняется (она вдоль оси);
  • v\mathbf{v}_\perp вращается в плоскости, перпендикулярной k\mathbf{k}. В этой плоскости есть удобный ортонормированный базис: e^1=v/v\hat{\mathbf{e}}_1 = \mathbf{v}_\perp / |\mathbf{v}_\perp| и e^2=k×e^1\hat{\mathbf{e}}_2 = \mathbf{k} \times \hat{\mathbf{e}}_1.

Поворот v\mathbf{v}_\perp даёт vcosθ+(k×v)sinθ\mathbf{v}_\perp \cos\theta + (\mathbf{k} \times \mathbf{v}_\perp)\sin\theta.

Заметим, что k×v=k×v\mathbf{k} \times \mathbf{v}_\perp = \mathbf{k} \times \mathbf{v} (параллельная компонента не даёт вклад в крест-произведение). Собирая всё вместе:

v=v+vcosθ+(k×v)sinθ=k(kv)+(vk(kv))cosθ+(k×v)sinθ,\mathbf{v}' = \mathbf{v}_\parallel + \mathbf{v}_\perp\cos\theta + (\mathbf{k} \times \mathbf{v})\sin\theta = \mathbf{k}(\mathbf{k} \cdot \mathbf{v}) + (\mathbf{v} - \mathbf{k}(\mathbf{k}\cdot\mathbf{v}))\cos\theta + (\mathbf{k} \times \mathbf{v})\sin\theta,

что после перегруппировки даёт исходную формулу.

Матрица поворота через формулу Родрига

Формула Родрига удобна не только для конкретного вектора, но и для построения матрицы поворота RR. Если ось k=(kx,ky,kz)\mathbf{k} = (k_x, k_y, k_z), то:

R=Icosθ+(1cosθ)kkT+sinθK,R = I\cos\theta + (1-\cos\theta)\,\mathbf{k}\mathbf{k}^T + \sin\theta\,K,

где II - единичная матрица, kkT\mathbf{k}\mathbf{k}^T - матрица проекции, KK - кососимметрическая матрица оси:

K=(0kzkykz0kxkykx0).K = \begin{pmatrix} 0 & -k_z & k_y \\ k_z & 0 & -k_x \\ -k_y & k_x & 0 \end{pmatrix}.

Эта запись - стандарт в компьютерной графике. Вместо того чтобы хранить три угла Эйлера и бороться с их порядком, достаточно хранить ось k\mathbf{k} и угол θ\theta (так называемое представление ось-угол), а нужную матрицу строить по формуле выше.

Разложение вектора v на параллельную и перпендикулярную составляющие относительно оси k: v_par вдоль оси не меняется, v_perp вращается в плоскости на угол theta
Разложение вектора v на параллельную и перпендикулярную составляющие относительно оси k: v_par вдоль оси не меняется, v_perp вращается в плоскости на угол theta

Частный случай: поворот вокруг координатных осей

Проверим формулу Родрига на простом примере: поворот вектора v=(1,0,0)\mathbf{v} = (1, 0, 0) вокруг оси k=(0,0,1)\mathbf{k} = (0, 0, 1) на угол θ=90°\theta = 90°.

Вычислим слагаемые:

  • vcos90°=(0,0,0)\mathbf{v}\cos 90° = (0, 0, 0);
  • k×v=(0,0,1)×(1,0,0)=(0010, 1100, 0001)=(0,1,0)\mathbf{k} \times \mathbf{v} = (0,0,1) \times (1,0,0) = (0\cdot0 - 1\cdot0,\ 1\cdot1 - 0\cdot0,\ 0\cdot0 - 0\cdot1) = (0, 1, 0); умноженное на sin90°=1\sin 90° = 1 даёт (0,1,0)(0, 1, 0);
  • kv=0\mathbf{k} \cdot \mathbf{v} = 0, третье слагаемое равно нулю.

Итог: v=(0,1,0)\mathbf{v}' = (0, 1, 0) - ось xx повернулась в ось yy, что совпадает с матрицей поворота вокруг zz на 90°90°.

Применение в задачах

Формула Родрига появляется в нескольких типах задач, и понимать её геометрический смысл важнее, чем заучивать наизусть.

Задачи на поворот в 3D. Дан вектор и произвольная ось - нужно найти координаты повёрнутого вектора. Алгоритм: нормировать ось (k^=k/k\hat{\mathbf{k}} = \mathbf{k}/|\mathbf{k}|), вычислить скалярное произведение kv\mathbf{k} \cdot \mathbf{v} и векторное k×v\mathbf{k} \times \mathbf{v}, подставить в формулу. Проверить: длина v|\mathbf{v}'| должна совпасть с v|\mathbf{v}|.

Составление матрицы поворота. Если угол и ось заданы, матрицу RR строят по формуле выше - это быстрее, чем перемножать три матрицы элементарных поворотов вокруг xx, yy, zz по очереди, и не требует выбора порядка следования осей (который в задачнике не всегда указан явно).

Проверка изометрии. Любой поворот сохраняет длину вектора: v=v|\mathbf{v}'| = |\mathbf{v}| и взаимные углы между векторами. Это хорошая проверка вычислений - если длина изменилась, где-то ошибка в знаке или подстановке. Второй полезный контроль: сумма квадратов элементов каждой строки матрицы RR должна быть равна единице.

Кватернионы. Формула Родрига - прямой предшественник кватернионного поворота. Единичный кватернион q=cos(θ/2)+ksin(θ/2)q = \cos(\theta/2) + \mathbf{k}\sin(\theta/2) кодирует ту же самую ось-угол и действует на вектор через v=qvq1\mathbf{v}' = q\mathbf{v}q^{-1}. Это избегает «гимбального замка» углов Эйлера и упрощает интерполяцию поворотов (SLERP) при анимации.

Бесконечно малый поворот. При θ0\theta \to 0: cosθ1\cos\theta \approx 1, sinθθ\sin\theta \approx \theta, и формула Родрига переходит в vv+θ(k×v)\mathbf{v}' \approx \mathbf{v} + \theta(\mathbf{k} \times \mathbf{v}) - линейное приближение, широко используемое в механике твёрдого тела при малых поворотах.

Матрица поворота R заполняется по формуле Родрига: сначала единичная матрица, затем добавляется слагаемое с kk^T, затем кососимметрическое K. Каждый шаг подсвечивается отдельным цветом

Частые ошибки

  • Ненормированная ось. Формула Родрига верна только для единичного k\mathbf{k}. Если k1|\mathbf{k}| \neq 1, сначала нормируйте: kk/k\mathbf{k} \leftarrow \mathbf{k} / |\mathbf{k}|.
  • Перепутан порядок в векторном произведении. k×v\mathbf{k} \times \mathbf{v} и v×k\mathbf{v} \times \mathbf{k} отличаются знаком. В формуле стоит именно k×v\mathbf{k} \times \mathbf{v} - ось «крест» вектор.
  • Угол в градусах вместо радиан. В cosθ\cos\theta и sinθ\sin\theta подставляют радианы. Если угол дан в градусах, умножьте на π/180\pi/180.
  • Забытое третье слагаемое. Если вектор не перпендикулярен оси, kv0\mathbf{k} \cdot \mathbf{v} \neq 0 и третье слагаемое ненулевое - без него результат неверен.
  • Применение к ненулевому vzv_z при оси k=zk = z. При k=(0,0,1)\mathbf{k} = (0,0,1) и произвольном vzv_z компонента vzv_z не меняется (она вдоль оси). Третье слагаемое как раз восстанавливает kvz\mathbf{k}\cdot v_z - не вычёркивайте его из формулы.

FAQ

Что делать, если ось вращения не единичная? Нормируйте её перед подстановкой: k^=k/k\hat{\mathbf{k}} = \mathbf{k} / |\mathbf{k}|. Формула Родрига требует k=1|\mathbf{k}| = 1 - это единственное условие на ось.

Как связана формула Родрига с матрицей поворота? Она и есть матрица поворота, записанная через произведения ось-вектор. Подставляя последовательно v=ex\mathbf{v} = \mathbf{e}_x, ey\mathbf{e}_y, ez\mathbf{e}_z, получаем три столбца матрицы RR. Развёрнутая запись: R=Icosθ+(1cosθ)kkT+sinθKR = I\cos\theta + (1-\cos\theta)\mathbf{k}\mathbf{k}^T + \sin\theta K.

Можно ли составить поворот вокруг двух осей через формулу Родрига? Последовательное применение формулы Родрига дважды даёт корректный результат, но ось и угол составного поворота уже не складываются тривиально. Для цепочек поворотов удобнее кватернионное умножение, которое основано на той же формуле.

Коротко

Формула Родрига v=vcosθ+(k×v)sinθ+k(kv)(1cosθ)\mathbf{v}' = \mathbf{v}\cos\theta + (\mathbf{k} \times \mathbf{v})\sin\theta + \mathbf{k}(\mathbf{k} \cdot \mathbf{v})(1-\cos\theta) поворачивает произвольный вектор v\mathbf{v} вокруг единичной оси k\mathbf{k} на угол θ\theta за три арифметических слагаемых. Каждое из них имеет геометрический смысл: косинусная компонента в плоскости, синусная поперечная и сохранение проекции вдоль оси. Из той же формулы напрямую строится матрица поворота RR и кватернионное представление - ключевые инструменты трёхмерной геометрии.

Доверьте текст нейросети EssayAI

Открыть EssayAI

Бесплатно, на русском языке и без VPN

Читайте также