Формализмы вращения в трех измерениях

редактировать
способов представления трехмерных вращений

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

Согласно теореме Эйлера о вращении вращение твердого тела (или трехмерной системы координат с фиксированным началом ) описывается однократным вращением вокруг некоторой оси. Такое вращение может быть однозначно описано минимум тремя действительными параметрами. Однако по разным причинам есть несколько способов его представления. Многие из этих представлений используют больше, чем необходимый минимум трех параметров, хотя каждый из них по-прежнему имеет только три степени свободы.

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

Содержание
  • 1 Вращения и движения
  • 2 Альтернативы формализма
    • 2.1 Матрица вращения
    • 2.2 Ось Эйлера и угол (вектор вращения)
    • 2.3 Вращения Эйлера
    • 2.4 Кватернионы
    • 2.5 Вектор Родрига
    • 2.6 Параметры Кэли – Клейна
    • 2.7 Многомерные аналоги
    • 2.8 Закон преобразования вектора
  • 3 Формулы преобразования между формализмами
    • 3.1 Матрица вращения ↔ Углы Эйлера
      • 3.1.1 Матрица вращения → Углы Эйлера (внешние zxz)
      • 3.1.2 Углы Эйлера (внутренние zy′-x ″) → матрица вращения
    • 3.2 Матрица вращения ↔ Ось Эйлера / угол
    • 3.3 Матрица вращения ↔ кватернион
    • 3.4 Эйлер углы ↔ кватернион
      • 3.4.1 углы Эйлера (zxz внешний) → кватернион
      • 3.4.2 углы Эйлера (zy′-x ″ внутренний) → кватернион
      • 3.4.3 Кватернион → углы Эйлера (внешний zxz)
      • 3.4.4 Кватернион → углы Эйлера (zy′-x ″ внутренние)
    • 3.5 Ось Эйлера – угол ↔ кватернион
  • 4 Формулы преобразования для производных
    • 4.1 Матрица вращения ↔ угловые скорости
    • 4.2 Кватернион ↔ ан Гулярные скорости
  • 5 Роторы в геометрической алгебре
  • 6 Угол-угол-угол
    • 6.1 Преобразование в 1-норму
    • 6.2 Представление кватернионов
    • 6.3 Вычисление основной матрицы
    • 6.4 Вычисление альтернативной основы
    • 6.5 Вращение вектора
    • 6.6 Вращение Родригеса
    • 6.7 Преобразование из базовой матрицы
    • 6.8 Преобразование из нормального вектора (Y)
      • 6.8.1 Выровнять нормаль с использованием базиса
      • 6.8.2 Выровнять нормаль напрямую
    • 6.9 Преобразование из угла оси
  • 7 См. Также
  • 8 Ссылки
  • 9 Дополнительная литература
  • 10 Внешние ссылки
Вращения и движения

Формализмы вращения сосредоточены на правильных (сохраняющие ориентацию ) движения евклидова пространства с одной фиксированной точкой, к которой относится вращение. Хотя физические движения с фиксированной точкой являются важным случаем (например, описанные в кадре центра масс, или движения сустава ), этот подход создает знания о все движения. Любое собственное движение евклидова пространства разлагается на вращение вокруг начала координат и перенос. Каким бы ни был порядок их композиции, «чистый» компонент вращения не изменится, однозначно определяемый полным движением.

Можно также понимать «чистые» вращения как линейные карты в векторном пространстве с евклидовой структурой, а не как карты точек соответствующее аффинное пространство. Другими словами, формализм вращения захватывает только вращательную часть движения, которая содержит три степени свободы, и игнорирует поступательную часть, содержащую еще три.

При представлении вращения в виде чисел на компьютере некоторые люди предпочитают представление кватерниона или представление оси + угол, потому что они избегают блокировки кардана, которая может возникнуть при эйлеровом вращении.

Альтернативы формализма

Матрица вращения

Вышеупомянутая триада единичных векторов также называется базисом. Если задать координаты (компоненты) векторов этого базиса в его текущем (повернутом) положении, в терминах опорных (не повернутых) координатных осей, будет полностью описан поворот. Три единичных вектора, u ^ {\ displaystyle {\ hat {\ mathbf {u}}}}{\ hat {{\ mathbf {u}}}} , v ^ {\ displaystyle {\ hat {\ mathbf {v}}}}{\ hat {{\ mathbf {v}}}} и w ^ {\ displaystyle {\ hat {\ mathbf {w}}}}{\ displaystyle {\ шляпа {\ mathbf {w}}}} , которые образуют повернутый базис, каждая из которых состоит из 3 координат, что дает всего 9 параметров.

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

A = [u ^ xv ^ xw ^ xu ^ yv ^ yw ^ yu ^ zv ^ zw ^ z] {\ displaystyle \ mathbf {A} = \ left [{\ begin {array} {ccc} {\ hat {\ mathbf {u }}} _ {x} {\ hat {\ mathbf {v}}} _ {x} {\ hat {\ mathbf {w}}} _ {x} \\ {\ hat {\ mathbf {u} }} _ {y} {\ hat {\ mathbf {v}}} _ {y} {\ hat {\ mathbf {w}}} _ {y} \\ {\ hat {\ mathbf {u}} } _ {z} {\ hat {\ mathbf {v}}} _ {z} {\ hat {\ mathbf {w}}} _ {z} \\\ end {array}} \ right]}\ mathbf {A} = \ left [{\ begin {array} {ccc} { \ hat {\ mathbf {u}}} _ {x} {\ hat {\ mathbf {v}}} _ {x} {\ hat {\ mathbf {w}}} _ {x} \\ {\ шляпа {\ mathbf {u}}} _ {y} {\ шляпа {\ mathbf {v}}} _ {y} {\ hat {\ mathbf {w}}} _ {y} \\ {\ hat {\ mathbf {u}}} _ {z} {\ hat {\ mathbf {v}}} _ {z} {\ hat {\ mathbf {w}}} _ {z} \\\ end {массив }} \ right]

Не все элементы матрицы вращения независимы - согласно теореме Эйлера о вращении матрица вращения имеет только три степени свободы.

Матрица вращения имеет следующие свойства:

{1, e ± i θ} = {1, cos ⁡ θ + i sin ⁡ θ, cos ⁡ θ - i sin ⁡ θ} {\ displaystyle \ left \ {1, e ^ {\ pm i \ theta} \ right \} = \ {1, \ \ cos \ theta + i \ sin \ theta, \ \ cos \ theta -i \ sin \ theta \}}{\ displaystyle \ left \ {1, e ^ { \ pm я \ theta} \ right \} = \ {1, \ \ cos \ theta + i \ sin \ theta, \ \ cos \ theta -i \ sin \ theta \}}
где i - стандартная мнимая единица со свойством i = −1
  • Детерминант числа A равен +1, что эквивалентно произведению собственных значений.
  • След элемента A равен 1 + 2 cos θ, что эквивалентно сумме его собственных значений.

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

Вышеуказанные свойства эквивалентны:

| и ^ | = | v ^ | = | w ^ | Знак равно 1 и ^ ⋅ v ^ знак равно 0 U ^ × v ^ = вес ^, {\ Displaystyle {\ begin {align} | {\ hat {\ mathbf {u}}} | = | {\ hat {\ mathbf {v }}} | = | {\ hat {\ mathbf {w}}} | = 1 \\ {\ hat {\ mathbf {u}}} \ cdot {\ hat {\ mathbf {v}}} = 0 \\ {\ hat {\ mathbf {u}}} \ times {\ hat {\ mathbf {v}}} = {\ hat {\ mathbf {w}}} \,, \ end {align}}}{\ displaystyle {\ begin {align} | {\ hat {\ mathbf {u}}} | = | {\ hat {\ mathbf { v}}} | = | {\ hat {\ mathbf {w}}} | = 1 \\ {\ hat {\ mathbf {u}}} \ cdot {\ hat {\ mathbf {v}}} = 0 \\ {\ hat {\ mathbf {u}}} \ times {\ hat {\ mathbf {v}}} = {\ hat {\ mathbf {w}}} \,, \ end {выровнено}}}

, что является другим способом заявить, что (u ^, v ^, w ^) {\ displaystyle ({\ hat {\ mathbf {u}}}, {\ hat {\ mathbf {v}}}, {\ hat {\ mathbf {w}}})}{\ displaystyle ({\ hat {\ mathbf {u}}}, {\ hat {\ mathbf {v}}}, {\ hat {\ mathbf {w}}})} образуют трехмерный ортонормированный базис. Эти операторы содержат всего 6 условий (перекрестное произведение содержит 3), оставляя матрицу вращения только с 3 степенями свободы, если требуется.

Два последовательных поворота, представленные матрицами A1и A2, легко объединяются как элементы группы,

A total = A 2 A 1 {\ displaystyle \ mathbf {A} _ {\ text {total}} = \ mathbf {A} _ {2} \ mathbf {A} _ {1}}{\ displaystyle \ mathbf {A } _ {\ text {total}} = \ mathbf {A} _ {2} \ mathbf {A} _ {1}}

(Обратите внимание на порядок, так как вектор, который вращается, умножается справа).

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

Ось Эйлера и угол (вектор вращения)

Визуализация вращения, представленного осью Эйлера и углом.

Из теоремы Эйлера о вращении мы знаем, что любое вращение может быть выражается как одно вращение вокруг некоторой оси. Ось - это единичный вектор (уникальный, кроме знака), который не изменяется при вращении. Величина угла также уникальна, его знак определяется знаком оси вращения.

Ось может быть представлена ​​как трехмерный единичный вектор

e ^ = [exeyez] {\ displaystyle {\ hat {\ mathbf {e}}} = {\ begin {bmatrix } e_ {x} \\ e_ {y} \\ e_ {z} \ end {bmatrix}}}{\ displaystyle {\ hat { \ mathbf {e}}} = {\ begin {bmatrix} e_ {x} \\ e_ {y} \\ e_ {z} \ end {bmatrix}}}

и угол на скаляр θ.

Поскольку ось нормализована, она имеет только две степени свободы. Угол добавляет третью степень свободы к этому представлению вращения.

Можно выразить вращение как вектор вращения или вектор Эйлера, ненормализованный трехмерный вектор, направление которого задает ось, и длина которого равна θ,

r = θ e ^. {\ displaystyle \ mathbf {r} = \ theta {\ hat {\ mathbf {e}}} \,.}{\ displaystyle \ mathbf {r} = \ theta {\ hat {\ mathbf {e}}} \,.}

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

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

Эйлеровы вращения

Эйлеровы вращения Земли. Внутренняя (зеленый), прецессия (синий) и нутация (красный)

Идея вращения Эйлера заключается в разделении полного вращения системы координат на три более простых основных вращения, называемых прецессией, нутацией и внутренним вращением, каждый из которых является приращением одного из углов Эйлера. Обратите внимание, что внешняя матрица будет представлять собой вращение вокруг одной из осей отсчета, и внутренняя матрицу представляет собой вращение вокруг одной из осей подвижных рам. Средняя матрица представляет вращение вокруг промежуточной оси, называемой линией узлов .

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

Используемое соглашение обычно указывается путем указания осей, вокруг которых происходят последовательные вращения (перед составлением), с указанием на них индекса (1, 2, 3) или буквы (X, Y, Z). Сообщества инженеров и робототехников обычно используют углы Эйлера 3-1-3. Обратите внимание, что после создания независимых поворотов они больше не вращаются вокруг своей оси. Самая внешняя матрица вращает две другие, оставляя вторую матрицу вращения над линией узлов, а третью - в кадре, сопутствующем телу. Существует 3 × 3 × 3 = 27 возможных комбинаций трех основных поворотов, но только 3 × 2 × 2 = 12 из них могут быть использованы для представления произвольных трехмерных поворотов в виде углов Эйлера. Эти 12 комбинаций позволяют избежать последовательных вращений вокруг одной и той же оси (например, XXY), что уменьшит количество степеней свободы, которые могут быть представлены.

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

В авиации ориентация самолета обычно выражается как внутренняя углы Тейта-Брайана в соответствии с соглашением zy'-x ″, которые называется heading, elevation и bank (или синонимом yaw, pitch и сверните ).

Кватернионы

Кватернионы, которые образуют четырехмерное векторное пространство, оказались очень полезными для представления поворотов благодаря ряду преимуществ по сравнению с другими представлениями, упомянутыми в этой статье.

Кватернионное представление вращения записывается как versor (нормализованный кватернион)

q ^ = qii + qjj + qkk + qr = [qiqjqkqr] {\ displaystyle {\ hat { \ mathbf {q}}} = q_ {i} \ mathbf {i} + q_ {j} \ mathbf {j} + q_ {k} \ mathbf {k} + q_ {r} = {\ begin {bmatrix} q_ {i} \\ q_ {j} \\ q_ {k} \\ q_ {r} \ end {bmatrix}}}{\ displaystyle {\ hat {\ mathbf {q}}} = q_ {i} \ mathbf {i} + q_ {j} \ mathbf { j} + q_ {k} \ mathbf {k} + q_ {r} = {\ begin {bmatrix} q_ {i} \\ q_ {j} \\ q_ {k} \\ q_ {r} \ end {bmatrix}}}

В приведенном выше определении кватернион хранится в виде массива в соответствии с соглашением, используемым в (Wertz 1980) и ( Маркли 2003). Альтернативное определение, используемое, например, в (Coutsias 1999) и (Schmidt 2001), определяет «скалярный» термин как первый элемент кватерниона, при этом остальные элементы смещены на одну позицию вниз.

По оси Эйлера

e ^ = [exeyez] {\ displaystyle {\ hat {\ mathbf {e}}} = {\ begin {bmatrix} e_ {x} \\ e_ { y} \\ e_ {z} \ end {bmatrix}}}{\ displaystyle {\ hat { \ mathbf {e}}} = {\ begin {bmatrix} e_ {x} \\ e_ {y} \\ e_ {z} \ end {bmatrix}}}

и угол θ компоненты этого Versor выражаются следующим образом:

qi = ex sin ⁡ θ 2 qj = ey sin ⁡ θ 2 qk = ez sin ⁡ θ 2 qr = соз ⁡ θ 2 {\ displaystyle {\ begin {выровнено} q_ {i} = e_ {x} \ sin {\ frac {\ theta} {2}} \\ q_ {j} = e_ {y} \ sin {\ frac {\ theta} {2}} \\ q_ {k} = e_ {z} \ sin {\ frac {\ theta} {2}} \\ q_ {r} = \ cos {\ frac {\ theta} {2}} \ end {align}}}{\ displaystyle {\ begin {align} q_ {i} = e_ {x} \ sin {\ frac {\ theta} {2}} \\ q_ {j} = e_ {y} \ sin {\ frac {\ theta} {2}} \\ q_ {k} = e_ {z} \ sin {\ frac {\ theta} {2}} \\ q_ {r} = \ cos {\ frac {\ th eta} {2}} \ end {align}}}

Проверка показывает, что параметризация кватернионов подчиняется следующему ограничению:

qi 2 + qj 2 + qk 2 + qr 2 = 1 { \ displaystyle q_ {i} ^ {2} + q_ {j} ^ {2} + q_ {k} ^ {2} + q_ {r} ^ {2} = 1}q_ {i} ^ {2} + q_ {j} ^ {2} + q_ {k} ^ {2} + q_ {r} ^ {2} = 1

Последний термин (в нашем определении) часто называют скалярным членом, который происходит от кватернионов, если понимать его как математическое расширение комплексных чисел, записанное как

a + bi + cj + dk с a, b, c, d ∈ R {\ displaystyle a + bi + cj + dk \ qquad {\ text {with}} a, b, c, d \ in \ mathbb {R}}{\ displaystyle a + bi + cj + dk \ qquad {\ text {with}} a, б, с, d \ in \ mathbb {R}}

и где {i, j, k} - гиперкомплексные числа, удовлетворяющие

i 2 = j 2 = k 2 = - 1 ij = - ji = kjk = - kj = iki = - ik = j { \ displaystyle {\ begin {array} {ccccccc} i ^ {2} = j ^ {2} = k ^ {2} = - 1 \\ ij = - ji = k \\ jk = - kj = i \\ ki = - ik = j \ end {array}}}{\ displaystyle {\ begin {array} {ccccccc} i ^ {2} = j ^ {2} = k ^ {2} = - 1 \\ ij = - ji = k \\ jk = - kj = i \\ ki = - ik = j \ end {array}}}

Кватернионное умножение, которое используется для указания составного вращения, выполняется так же, как умножение комплексные числа, за исключением того, что необходимо учитывать порядок элементов, поскольку умножение не коммутативно. В матричной записи умножение кватернионов можно записать как

q ~ ⊗ q = [qrqk - qjqi - qkqrqiqjqj - qiqrqk - qi - qj - qkqr] [q ~ iq ~ jq ~ kq ~ r] = [q ~ r - q ~ kq ~ jq ~ iq ~ kq ~ r - q ~ iq ~ j - q ~ jq ~ iq ~ rq ~ k - q ~ i - q ~ j - q ~ kq ~ r] [qiqjqkqr] {\ displaystyle {\ tilde {\ mathbf {q}}} \ otimes \ mathbf {q} = {\ begin {bmatrix} \; \; \, q_ {r} \; \; \, q_ {k} - q_ {j} \; \; \, q_ {i} \\ - q_ {k} \; \; \, q_ {r} \; \; \, q_ {i} \; \; \, q_ {j} \\\; \; \, q_ {j} - q_ {i} \; \; \, q_ {r} \; \; \, q_ {k} \\ - q_ {i} - q_ {j} - q_ {k} \; \; \, q_ {r} \ end {bmatrix}} {\ begin {bmatrix} {\ tilde {q}} _ {i} \\ {\ tilde {q }} _ {j} \\ {\ tilde {q}} _ {k} \\ {\ tilde {q}} _ {r} \ end {bmatrix}} = {\ begin {bmatrix} \; \; \, {\ tilde {q}} _ {r} - {\ tilde {q}} _ {k} \; \; \, {\ tilde {q}} _ {j} \; \; \, {\ tilde {q}} _ {i} \\\; \; \, {\ tilde {q}} _ {k} \; \; \, {\ tilde {q}} _ {r} - {\ tilde {q}} _ {i} \; \; \, {\ tilde {q}} _ {j} \\ - {\ tilde {q}} _ {j} \; \; \, {\ tilde {q}} _ {i} \; \; \, {\ tilde {q}} _ {r} \; \; \, {\ tilde {q}} _ {k} \\ - {\ tilde {q}} _ {i} - {\ tilde {q}} _ {j} - {\ tilde {q} } _ {k} \; \; \, {\ tilde {q}} _ {r} \ end {bmatrix}} {\ begin {bmatrix} q_ {i} \\ q_ {j} \\ q_ {k } \\ q_ {r} \ end {bmatrix}}}{\ displaystyle {\ tilde {\ mathbf {q}}} \ otimes \ mathbf {q} = {\ begin {bmatrix} \; \; \, q_ {r} \; \; \, q_ {k} - q_ {j} \; \; \, q_ {i} \\ - q_ {k} \; \; \, q_ {r} \; \; \, q_ {i} \; \; \, q_ {j} \\\; \; \, q_ {j} - q_ {i} \; \; \, q_ {r} \; \; \, q_ {k} \\ - q_ {i} - q_ {j} - q_ {k} \; \; \, q_ {r} \ end {bmatrix}} {\ begin {bmatrix} {\ tilde {q}} _ {i} \\ {\ tilde {q }} _ {j} \\ {\ tilde {q}} _ {k} \\ {\ tilde {q}} _ {r} \ end {bmatrix}} = {\ begin {bmatrix} \; \; \, {\ tilde {q}} _ {r} - {\ tilde {q}} _ {k} \; \; \, {\ tilde {q}} _ {j} \; \; \, {\ tilde {q}} _ {i} \\\; \; \, {\ tilde {q}} _ {k} \; \; \, {\ tilde {q}} _ {r} - {\ tilde {q}} _ {i} \; \; \, {\ tilde {q}} _ {j} \\ - {\ tilde {q}} _ {j} \; \; \, {\ tilde {q}} _ {i} \; \; \, {\ tilde {q}} _ {r} \; \; \, {\ tilde {q}} _ {k} \\ - {\ tilde {q}} _ {i} - {\ tilde {q}} _ {j} - {\ tilde {q}} _ {k} \; \; \, {\ tilde {q} } _ {r} \ end {bmatrix}} {\ begin {bmatrix} q_ {i} \\ q_ {j} \\ q_ {k} \\ q_ {r} \ end {bmatrix}}}

Таким образом, объединение двух последовательных вращений кватернионов так же просто, как использование матрицы вращения. Так же, как две последовательные матрицы поворота, A1, за которыми следует A2, объединяются как

A 3 = A 2 A 1 {\ displaystyle \ mathbf {A} _ {3} = \ mathbf {A} _ {2 } \ mathbf {A} _ {1}}\ mathbf {A} _ {3} = \ mathbf {A} _ {2} \ mathbf {A} _ {1} ,

мы можем представить это с помощью параметров кватерниона аналогичным образом:

q 3 = q 2 ⊗ q 1 {\ displaystyle \ mathbf {q} _ {3} = \ mathbf {q} _ {2} \ otimes \ mathbf {q} _ {1}}\ mathbf {q} _ {3} = \ mathbf {q} _ {2} \ otimes \ mathbf {q} _ {1}

Кватернионы - очень популярная параметризация благодаря следующим свойствам:

  • Более компактны, чем матричное представление, и менее восприимчивы к ошибки округления
  • Элементы кватерниона непрерывно изменяются по единичной сфере в ℝ (обозначены S) по мере изменения ориентации, избегая прерывистых скачков (присущих трехмерной параметризации)
  • Выражение матрицы вращения в терминах параметров кватернионов не включает тригонометрических функций
  • Простое объединение двух отдельных вращений, представленных в виде кватернионов, с использованием произведения кватернионов

Как и матрицы вращения, кватернионы должны так Иногда необходимо перенормировать из-за ошибок округления, чтобы убедиться, что они соответствуют допустимым поворотам. Однако вычислительные затраты на перенормировку кватерниона намного меньше, чем на нормализацию матрицы 3 × 3.

Кватернионы также отражают спинорный характер вращений в трех измерениях. Для трехмерного объекта, соединенного с его (фиксированным) окружением с помощью слабых струн или лент, струны или ленты могут быть распутаны после двух полных оборотов вокруг некоторой фиксированной оси из начального распутанного состояния. Алгебраически кватернион, описывающий такое вращение, изменяется от скалярного +1 (изначально), через значения (скаляр + псевдовектор) до скалярных значений −1 (за один полный оборот), через значения (скаляр + псевдовектор) обратно на скаляр +1 (при два полных оборота). Этот цикл повторяется каждые 2 оборота. После 2n витков (целое число n>0), без каких-либо промежуточных попыток распутывания, струны / полосы можно частично распутать обратно в состояние 2 (n - 1) витков с каждым применением той же процедуры, используемой при распутывании от 2 витков до 0. оказывается. Применение той же процедуры n раз вернет 2n запутанный объект обратно в состояние распутывания или 0 оборотов. Процесс распутывания также устраняет любое скручивание самих струн / лент, вызванное вращением. Для демонстрации этих фактов можно использовать простые трехмерные механические модели.

Вектор Родригеса

Вектор Родригеса (иногда называемый вектор Гиббса, с координатами, называемыми параметрами Родригеса ) выражается через ось и угол поворота следующим образом:

g = e ^ tan ⁡ θ 2 {\ displaystyle \ mathbf {g} = {\ hat {\ mathbf {e}}} \ tan {\ frac {\ theta} {2}}}{\ displaystyle \ mathbf {g} = {\ hat {\ mathbf {e}}} \ tan {\ frac {\ theta} {2}}}

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

Он имеет разрыв на 180 ° (π радиан): поскольку любой вектор вращения r стремится к углу π радиан, его касательная стремится к бесконечности.

Вращение g с последующим вращением f в представлении Родригеса имеет форму композиции простого вращения

(g, f) = g + f - f × g 1 - g f. {\ displaystyle (\ mathbf {g}, \ mathbf {f}) = {\ frac {\ mathbf {g} + \ mathbf {f} - \ mathbf {f} \ times \ mathbf {g}} {1- \ mathbf {g} \ cdot \ mathbf {f}}} \,.}{\ displaystyle (\ mathbf {g}, \ mathbf {f}) = {\ frac {\ mathbf {g} + \ mathbf {f} - \ mathbf {f} \ times \ mathbf {g}} {1- \ mathbf { g} \ cdot \ mathbf {f}}} \,.}

Сегодня самый простой способ доказать эту формулу - это (точный) дублетное представление, где g= n̂tan a и т. д.

Комбинаторные особенности только что упомянутого вывода матрицы Паули также идентичны эквивалентному выводу кватерниона ниже. Постройте кватернион, связанный с пространственным вращением R, как,

S = cos ⁡ ϕ 2 + sin ⁡ ϕ 2 S. {\ displaystyle S = \ cos {\ frac {\ phi} {2}} + \ sin {\ frac {\ phi} {2}} \ mathbf {S}.}{\ displaystyle S = \ cos { \ frac {\ phi} {2}} + \ sin {\ frac {\ phi} {2}} \ mathbf {S}.}

Тогда композиция вращения R B с R A - это вращение R C=RBRAс осью вращения и углом, определяемым произведением кватернионов,

A = cos ⁡ α 2 + sin ⁡ α 2 A и B = соз ⁡ β 2 + грех ⁡ β 2 B, {\ Displaystyle A = \ cos {\ frac {\ alpha} {2}} + \ sin {\ frac {\ alpha} {2}} \ mathbf { A} \ quad {\ text {and}} \ quad B = \ cos {\ frac {\ beta} {2}} + \ sin {\ frac {\ beta} {2}} \ mathbf {B},}{\ displaystyle A = \ cos {\ frac {\ alpha} {2}} + \ sin {\ frac {\ alpha} {2}} \ mathbf {A} \ quad {\ text {и} } \ quad B = \ cos {\ frac {\ beta} {2}} + \ sin {\ frac {\ beta} {2}} \ mathbf {B},}

, то есть

C = cos ⁡ γ 2 + sin ⁡ γ 2 C = (cos ⁡ β 2 + sin ⁡ β 2 B) (cos ⁡ α 2 + sin ⁡ α 2 A). {\ displaystyle C = \ cos {\ frac {\ gamma} {2}} + \ sin {\ frac {\ gamma} {2}} \ mathbf {C} = {\ Big (} \ cos {\ frac {\ beta} {2}} + \ sin {\ frac {\ beta} {2}} \ mathbf {B} {\ Big)} {\ Big (} \ cos {\ frac {\ alpha} {2}} + \ sin {\ frac {\ alpha} {2}} \ mathbf {A} {\ Big)}.}{\ displaystyle C = \ cos {\ frac { \ gamma} {2}} + \ sin {\ frac {\ gamma} {2}} \ mathbf {C} = {\ Big (} \ cos {\ frac {\ beta} {2}} + \ sin {\ frac {\ beta} {2}} \ mathbf {B} {\ Big)} {\ Big (} \ cos {\ frac {\ alpha} {2}} + \ sin {\ frac {\ alpha} {2} } \ mathbf {A} {\ Big)}.}

Разверните этот кватернионный продукт до

cos ⁡ γ 2 + sin ⁡ γ 2 C = (cos ⁡ β 2 соз ⁡ α 2 - грех ⁡ β 2 грех ⁡ α 2 В ⋅ A) {\ displaystyle \ cos {\ frac {\ gamma} {2}} + \ sin {\ frac {\ gamma} {2}} \ mathbf {C} = {\ Big (} \ cos {\ frac {\ beta} {2}} \ cos {\ frac {\ alpha} {2}} - \ sin {\ frac {\ beta} {2}} \ sin {\ frac {\ alpha} {2}} \ mathbf {B} \ cdot \ mathbf {A} {\ Big)}}{\ displaystyle \ cos {\ frac {\ gamma} {2}} + \ sin {\ frac {\ gamma } {2}} \ mathbf {C} = {\ Big (} \ cos {\ frac {\ beta} {2}} \ cos {\ frac {\ alpha} {2}} - \ sin {\ frac {\ бета} {2}} \ sin {\ frac {\ alpha} {2}} \ mathbf {B} \ cdot \ mathbf {A} {\ Big)}} + (sin ⁡ β 2 cos ⁡ α 2 B + sin ⁡ α 2 cos ⁡ β 2 A + sin ⁡ β 2 sin ⁡ α 2 B × A). {\ displaystyle + {\ Big (} \ sin {\ frac {\ beta} {2}} \ cos {\ frac {\ alpha} {2}} \ mathbf {B} + \ sin {\ frac {\ alpha} {2}} \ cos {\ frac {\ beta} {2}} \ mathbf {A} + \ sin {\ frac {\ beta} {2}} \ sin {\ frac {\ alpha} {2}} \ mathbf {B} \ times \ mathbf {A} {\ Big)}.}{\ displaystyle + {\ Big (} \ sin {\ frac {\ beta} {2}} \ cos {\ frac {\ alpha} {2}} \ mathbf {B} + \ sin {\ frac {\ alpha} {2}} \ cos {\ frac {\ beta} {2}} \ mathbf {A} + \ sin {\ frac {\ beta} {2}} \ sin {\ frac {\ alpha} {2}} \ mathbf {B} \ times \ mathbf {A} {\ Big)}.}

Разделите обе части этого уравнения на тождество, полученное в результате предыдущего,

cos ⁡ γ 2 = cos ⁡ β 2 cos ⁡ α 2 - грех ⁡ β 2 грех ⁡ α 2 В ⋅ A, {\ displaystyle \ cos {\ frac {\ gamma} {2}} = \ cos {\ frac {\ beta} {2}} \ cos {\ frac {\ alpha} {2}} - \ sin {\ frac {\ beta} {2}} \ sin {\ frac {\ alpha} {2}} \ mathbf {B} \ cdot \ mathbf {A},}{\ displaystyle \ cos {\ frac {\ gamma} {2}} = \ cos {\ frac {\ beta} {2}} \ cos {\ frac {\ alpha} {2}} - \ sin {\ frac {\ beta} {2}} \ грех {\ гидроразрыва {\ альфа} {2}} \ mathbf {B} \ cdot \ mathbf {A},}

и оцените

tan ⁡ γ 2 C = tan ⁡ β 2 B + tan ⁡ α 2 A + tan ⁡ β 2 tan ⁡ α 2 B × A 1 - tan ⁡ β 2 tan ⁡ α 2 B ⋅ A. {\ displaystyle \ tan {\ frac {\ gamma} {2}} \ mathbf {C} = {\ frac {\ tan {\ frac {\ beta} {2}} \ mathbf {B} + \ tan {\ frac {\ alpha} {2}} \ mathbf {A} + \ tan {\ frac {\ beta} {2}} \ tan {\ frac {\ alpha} {2}} \ mathbf {B} \ times \ mathbf { A}} {1- \ tan {\ frac {\ beta} {2}} \ tan {\ frac {\ alpha} {2}} \ mathbf {B} \ cdot \ mathbf {A}}}.}{\ displaystyle \ tan {\ frac {\ gamma} {2 }} \ mathbf {C} = {\ frac {\ tan {\ frac {\ beta} {2}} \ mathbf {B} + \ tan {\ frac {\ alpha} {2}} \ mathbf {A} + \ tan {\ frac {\ beta} {2}} \ tan {\ frac {\ alpha} {2}} \ mathbf {B} \ times \ mathbf {A}} {1- \ tan {\ frac {\ beta } {2}} \ tan {\ frac {\ alpha} {2}} \ mathbf {B} \ cdot \ mathbf {A}}}.}

. Это формула Родригеса для оси составного вращения, определенной в терминах осей двух вращений. Он вывел эту формулу в 1840 году (см. Стр. 408).

Три оси вращения A, Bи C образуют сферический треугольник, а двугранные углы между плоскостями, образованными сторонами этот треугольник определяется углами поворота.

Модифицированные параметры Родригеса (MRP) могут быть выражены через ось Эйлера и угол как

p = e ^ tan ⁡ θ 4. {\ displaystyle \ mathbf {p} = {\ hat {\ mathbf {e}}} \ tan {\ frac {\ theta} {4}} \,.}{\ displaystyle \ mathbf {p} = {\ hat {\ mathbf { e}}} \ tan {\ frac {\ theta} {4}} \,.}

Модифицированный вектор Родригеса является стереографическим projection отображение единичных кватернионов из 3-сферы на 3-мерную гиперплоскость чистого вектора.

Параметры Кэли – Клейна

См. Определение на Wolfram Mathworld.

многомерные аналоги

Закон преобразования вектора

Активные вращения Трехмерный вектор p в евклидовом пространстве вокруг оси n под углом η может быть легко записан в терминах точечных и перекрестных произведений следующим образом:

p ′ = p ∥ n + соз ⁡ η п ⊥ + грех ⁡ η п ∧ N {\ Displaystyle {\ textbf {p}} '= p _ {\ parallel} {\ textbf {n}} + \ cos {\ eta} \, {\ textbf {p }} _ {\ perp} + \ sin {\ eta} \, {\ textbf {p}} \ wedge {\ textbf {n}}}{\displaystyle {\textbf {p}}'=p_{\parallel }{\textbf {n}}+\cos {\eta }\,{\textbf {p}}_{\perp }+\sin {\eta }\,{\textbf {p}}\wedge {\textbf {n}}}

где

p ∥ = p ⋅ n {\ displaystyle p_ {\ parallel} = {\ textbf {p}} \ cdot {\ textbf {n}}}{\ displaystyle p _ {\ parallel} = {\ textbf {p}} \ cdot {\ textbf {n}}}

- это продольный компонент p вдоль n, заданный скалярное произведение,

p ⊥ = p - (p ⋅ n) n {\ displaystyle {\ textbf {p}} _ {\ perp} = {\ textbf {p}} - ({\ textbf {p}} \ cdot {\ textbf {n}}) {\ textbf {n}}}{\ displaystyle {\ textbf {p}} _ {\ perp} = {\ textbf {p}} - ({\ textbf {p}} \ cdot {\ textbf {n}}) {\ textbf {n }}}

- поперечный компонент p по отношению к n, и

p n {\ displaystyle {\ textbf {p}} \ wedge {\ textbf {n}}}{\ displaystyle {\ textbf {p} } \ wedge {\ textbf {n}}}

- это векторное произведение, из p с n.

Вышеприведенная формула показывает, что продольный компонент p остается неизменным, тогда как поперечная часть p вращается в плоскости, перпендикулярной к n . Эта плоскость охватывает поперечную часть самого p и направление, перпендикулярное как p, так и n . Вращение непосредственно идентифицируется в уравнении как двумерное вращение на угол η.

Пассивные вращения можно описать той же формулой, но с обратным знаком η или n.

Формулы преобразования между формализмами

Матрица вращения ↔ Углы Эйлера

Углы Эйлера (φ, θ, ψ) могут быть извлечены из матрицы вращения A {\ displaystyle \ scriptstyle \ mathbf {A}}\ scriptstyle \ mathbf {A} путем проверки матрицы вращения в аналитической форме.

Матрица вращения → углы Эйлера (zxz внешние)

Используя условное обозначение x, 3-1-3 внешние углы Эйлера φ, θ и ψ (вокруг ось z, ось x и снова Z {\ displaystyle \ scriptstyle Z}\ scriptstyle Z -axis) могут быть получены следующим образом:

ϕ = atan2 ⁡ (A 31, A 32) θ = arccos ⁡ (A 33) ψ = - atan2 ⁡ (A 13, A 23) {\ displaystyle {\ begin {align} \ phi = \ operatorname {atan2} \ left (A_ {31}, A_ {32} \ right) \\\ theta = \ arccos \ left (A_ {33} \ right) \\\ psi = - \ operatorname {atan2} \ left (A_ {13}, A_ {23} \ right) \ end {align}}}{\ displaystyle {\ begin {align} \ phi = \ operatorname {atan2} \ left (A_ {31}, A_ {32} \ right) \\\ theta = \ arccos \ left ( A_ {33} \ right) \\\ psi = - \ operatorname {atan2} \ left (A_ {13}, A_ {23} \ right) \ end {align}}}

Обратите внимание, что atan2 (a, b) эквивалентно arctan a / b, где также учитывается квадрант , в котором находится точка (b, a); см. atan2.

При реализации преобразования необходимо учитывать несколько ситуаций:

  • Обычно существует два решения в интервале [−π, π]. Вышеупомянутая формула работает только тогда, когда θ находится в интервале [0, π].
  • Для особого случая A 33 = 0, φ и ψ будут получены из A 11 и A 12.
  • Существует бесконечно много, но счетное количество решений за пределами интервала [−π, π].
  • Все ли математические решения применимы для данного приложения, зависит от ситуации.

Углы Эйлера (внутренние zy′-x ″) → матрица вращения

Матрица вращения A генерируется из 3-2-1 внутренних углов Эйлера путем умножения три матрицы, образованные вращениями вокруг осей.

A = A 3 A 2 A 1 = AZAYAX {\ displaystyle \ mathbf {A} = \ mathbf {A} _ {3} \ mathbf {A} _ {2} \ mathbf {A} _ {1} = \ mathbf {A} _ {Z} \ mathbf {A} _ {Y} \ mathbf {A} _ {X}}\ mathbf {A} = \ mathbf {A} _ {3} \ mathbf {A} _ {2} \ mathbf {A} _ {1} = \ mathbf {A} _ {Z} \ mathbf {A} _ {Y} \ mathbf {A} _ {X}

Оси вращения зависят от конкретного используемого соглашения. Для x-соглашения вращения производятся вокруг осей x, y и z с углами ϕ, θ и ψ, отдельные матрицы выглядят следующим образом:

AX = [1 0 0 0 cos ⁡ ϕ - sin ⁡ ϕ 0 sin ⁡ ϕ cos ⁡ ϕ] AY = [cos ⁡ θ 0 sin ⁡ θ 0 1 0 - sin ⁡ θ 0 cos ⁡ θ] AZ = [cos ⁡ ψ - sin ⁡ ψ 0 sin ⁡ ψ cos ⁡ ψ 0 0 0 1] {\ displaystyle {\ begin {align} \ mathbf {A} _ {X} = {\ begin {bmatrix} 1 0 0 \\ 0 \ cos \ phi - \ sin \ phi \\ 0 \ sin \ phi \ cos \ phi \ end {bmatrix}} \\ [5px] \ mathbf {A} _ {Y} = {\ begin {bmatrix} \ cos \ theta 0 \ sin \ theta \\ 0 1 0 \\ - \ sin \ theta 0 \ cos \ theta \ end {bmatrix}} \\ [5px] \ mathbf {A} _ {Z} = {\ begin {bmatrix} \ cos \ psi - \ sin \ psi 0 \\\ sin \ psi \ cos \ psi 0 \\ 0 0 1 \ end {bmatrix}} \ end {align}}}{\ displaystyle {\ begin {align} \ mathbf {A} _ {X} = {\ begin {bmatrix} 1 0 0 \\ 0 \ cos \ phi - \ sin \ phi \\ 0 \ sin \ phi \ cos \ phi \ end {bmatrix}} \\ [5px] \ mathbf {A} _ {Y} = {\ begin {bmatrix} \ cos \ theta 0 \ sin \ theta \\ 0 1 0 \\ - \ sin \ theta 0 \ cos \ theta \ end {bmatrix}} \\ [5px] \ mathbf {A} _ {Z} = {\ begin {bmatrix} \ cos \ psi - \ sin \ psi 0 \\\ sin \ psi \ cos \ psi 0 \\ 0 0 1 \ end {bmatrix}} \ end {align}}}

Это дает

A = [cos ⁡ θ cos ⁡ ψ - cos ⁡ ϕ sin ⁡ ψ + sin ⁡ ϕ sin ⁡ θ cos ⁡ ψ sin ⁡ ϕ sin ⁡ ψ + cos ⁡ ϕ sin ⁡ θ cos ⁡ ψ cos ⁡ θ sin ⁡ ψ cos ⁡ ϕ cos ⁡ ψ + sin ⁡ ϕ sin ⁡ θ sin ⁡ ψ - sin ⁡ ϕ соз ⁡ ψ + соз ⁡ ϕ sin ⁡ θ sin ⁡ ψ - sin ⁡ θ sin ⁡ ϕ cos ⁡ θ cos ⁡ ϕ cos ⁡ θ] {\ displaystyle \ mathbf {A} = {\ begin {bmatrix} \ cos \ theta \ cos \ psi - \ cos \ phi \ sin \ psi + \ sin \ phi \ sin \ theta \ cos \ psi \ sin \ phi \ sin \ psi + \ cos \ phi \ sin \ theta \ cos \ psi \\\ cos \ theta \ sin \ psi \ cos \ phi \ cos \ psi + \ sin \ phi \ sin \ theta \ sin \ psi - \ sin \ phi \ cos \ psi + \ cos \ phi \ sin \ theta \ sin \ psi \\ - \ sin \ theta \ sin \ phi \ cos \ theta \ cos \ phi \ cos \ theta \\\ end {bmatrix}}}{\ displaystyle \ mathbf {A } = {\ begin {bmatrix} \ cos \ theta \ cos \ psi - \ cos \ phi \ sin \ psi + \ sin \ phi \ sin \ theta \ cos \ psi \ sin \ phi \ sin \ psi + \ cos \ phi \ sin \ theta \ cos \ psi \\\ cos \ theta \ sin \ psi \ cos \ phi \ cos \ psi + \ sin \ phi \ sin \ theta \ sin \ psi - \ sin \ phi \ cos \ psi + \ cos \ phi \ sin \ theta \ sin \ psi \\ - \ sin \ theta \ sin \ phi \ cos \ theta \ cos \ phi \ cos \ theta \\\ end {bmatrix}}}

Примечание. Это действительно для правая система, которая является условием, используемым почти во всех инженерных и физических дисциплинах.

Интерпретация этих матриц правого вращения заключается в том, что они выражают преобразования координат (пассивный ) в отличие от точечных преобразований (активный ). Поскольку A выражает поворот от локального кадра 1 к глобальному кадру 0 (т. Е. A кодирует оси кадра 1 относительно кадра 0 ), элементарные матрицы поворота составлены, как указано выше. Поскольку обратное вращение - это просто вращение, транспонированное, если бы мы хотели, чтобы глобальное вращение было локальным с кадра 0 на кадр 1, мы бы написали A ⊤ = (AZAYAX) ⊤ знак равно AX ⊤ AY ​​⊤ AZ ⊤ {\ displaystyle \ mathbf {A} ^ {\ top} = (\ mathbf {A} _ {Z} \ mathbf {A} _ {Y} \ mathbf {A} _ {X }) ^ {\ top} = \ mathbf {A} _ {X} ^ {\ top} \ mathbf {A} _ {Y} ^ {\ top} \ mathbf {A} _ {Z} ^ {\ top} }{\ displaystyle \ mathbf {A} ^ {\ top} = (\ mathbf {A} _ {Z} \ mathbf {A} _ {Y} \ mathbf {A} _ {X}) ^ {\ top} = \ mathbf {A} _ {X} ^ {\ top} \ mathbf {A} _ {Y} ^ {\ top} \ mathbf { A} _ {Z} ^ {\ top}} .

Матрица вращения ↔ Ось Эйлера / угол

Если угол Эйлера θ не кратен π, ось Эйлера ê и угол θ могут быть вычислены из элементов матрицу вращения A следующим образом:

θ = arccos ⁡ A 11 + A 22 + A 33 - 1 2 e 1 = A 32 - A 23 2 sin ⁡ θ e 2 = A 13 - A 31 2 sin ⁡ θ e 3 = A 21 - A 12 2 грех ⁡ θ {\ displaystyle {\ begin {align} \ theta = \ arccos {\ frac {A_ {11} + A_ {22} + A_ {33} -1} {2}} \\ e_ {1} = {\ frac {A_ {32} -A_ {23}} {2 \ sin \ theta}} \\ e_ {2} = {\ frac {A_ {13} -A_ {31 }} {2 \ sin \ theta}} \\ e_ {3} = {\ frac {A_ {21} -A_ {12}} {2 \ sin \ theta}} \ end {align}}}{\ displaystyle {\ begin {align} \ theta = \ arccos {\ frac {A_ {11} + A_ {22} + A_ {33} -1} {2}} \\ e_ {1} = {\ frac {A_ {32} -A_ {23}} {2 \ sin \ theta}} \\ e_ {2} = {\ frac {A_ {13} -A_ {31}} {2 \ sin \ theta }} \\ e_ {3} = {\ frac {A_ {21} -A_ {12}} {2 \ sin \ theta}} \ end {align}}}

В качестве альтернативы можно использовать следующий метод: использовано:

Собственное разложение матрицы вращения дает собственные значения 1 и cos θ ± i sin θ. Ось Эйлера - это собственный вектор, соответствующий собственному значению 1, а θ можно вычислить из оставшихся собственных значений.

Ось Эйлера также может быть найдена с помощью разложения по сингулярным числам, поскольку это нормализованный вектор, охватывающий нулевое пространство матрицы I− A.

Чтобы преобразовать матрицу вращения, соответствующую оси Эйлера, другим способом ê и угол θ можно вычислить в соответствии с формулой вращения Родригеса (с соответствующей модификацией) следующим образом:

A = I 3 cos ⁡ θ + (1 - cos ⁡ θ) e ^ е ^ T + [е ^] × грех ⁡ θ {\ displaystyle \ mathbf {A} = \ mathbf {I} _ {3} \ cos \ theta + (1- \ cos \ theta) {\ hat {\ mathbf { e}}} {\ hat {\ mathbf {e}}} ^ {\ mathsf {T}} + \ left [{\ hat {\ mathbf {e}}} \ right] _ {\ times} \ sin \ theta }{\ displaystyle \ mathbf {A} = \ mathbf {I} _ {3} \ cos \ theta + (1- \ cos \ theta) {\ hat {\ mathbf {e}}} {\ hat {\ mathbf {e}}} ^ { \ mathsf {T}} + \ left [{\ hat {\ mathbf {e}}} \ right] _ {\ times} \ sin \ theta}

с I3единичной матрицей 3 × 3 и

[e ^] × = [0 - e 3 e 2 e 3 0 - e 1 - e 2 e 1 0 ] {\ displaystyle \ left [{\ hat {\ mathbf {e}}} \ right] _ {\ times} = {\ begin {bmatrix} 0 -e_ {3} e_ {2} \\ e_ {3} 0 -e_ {1} \\ - e_ {2} e_ {1} 0 \ end {bmatrix}}}{\ displaystyle \ left [{\ hat {\ mathbf {e}}} \ right] _ {\ times} = {\ begin {bmatrix} 0 -e_ {3} e_ {2} \\ e_ {3} 0 -e_ {1} \\ - e_ {2} e_ {1} 0 \ end {bmatrix}}}

- это матрица перекрестного произведения.

. Она расширяется до:

A 11 = ( 1 - cos ⁡ θ) e 1 2 + cos ⁡ θ A 12 = (1 - cos ⁡ θ) e 1 e 2 - e 3 sin ⁡ θ A 13 = (1 - cos ⁡ θ) e 1 e 3 + e 2 sin ⁡ θ A 21 = (1 - cos ⁡ θ) e 2 e 1 + e 3 sin ⁡ θ A 22 = (1 - cos ⁡ θ) e 2 2 + cos ⁡ θ A 23 = (1 - cos ⁡ θ) e 2 e 3 - e 1 sin ⁡ θ A 31 = (1 - cos ⁡ θ) e 3 e 1 - е 2 грех ⁡ θ A 32 знак равно (1 - соз ⁡ θ) е 3 е 2 + е 1 грех ⁡ θ A 33 = (1 - соз ⁡ θ) е 3 2 + соз ⁡ θ {\ displaystyle {\ begin { выровнено} A_ {11} = (1- \ cos \ theta) e_ {1} ^ {2} + \ cos \ theta \\ A_ {12} = (1- \ cos \ theta) e_ {1} e_ {2} -e_ {3} \ sin \ theta \\ A_ {13} = (1- \ cos \ theta) e_ {1} e_ {3} + e_ {2} \ sin \ theta \\ A_ {21 } = (1- \ cos \ theta) e_ {2} e_ {1} + e_ {3} \ sin \ theta \\ A_ {22} = (1- \ cos \ theta) e_ {2} ^ { 2} + \ cos \ theta \\ A_ {23} = (1- \ cos \ theta) e_ {2} e_ {3} -e_ {1} \ sin \ theta \\ A_ {31} = (1 - \ cos \ theta) e_ {3} e_ {1} -e_ {2} \ sin \ theta \\ A_ {32} = (1- \ cos \ theta) e_ {3} e_ {2} + e_ { 1} \ sin \ theta \\ A_ {33} = (1- \ cos \ theta) e_ {3} ^ {2} + \ cos \ theta \ end {выравнивается}}{\ displaystyle {\ begin {выровнено } A_ {11} = (1- \ cos \ theta) e_ {1} ^ {2} + \ cos \ theta \\ A_ {12} = (1- \ cos \ theta) e_ {1} e_ { 2} -e_ {3} \ sin \ theta \\ A_ {13} = (1- \ cos \ theta) e_ {1} e_ {3} + e_ {2} \ sin \ theta \\ A_ {21} = (1- \ cos \ theta) e_ {2} e_ {1} + e_ {3} \ sin \ theta \\ A_ {22} = (1- \ cos \ theta) e_ {2} ^ {2} + \ cos \ theta \\ A_ {23} = (1- \ cos \ theta) e_ {2} e_ {3} -e_ {1} \ sin \ theta \\ A_ {31} = ( 1- \ cos \ theta) e_ {3} e_ {1} -e_ {2} \ sin \ theta \\ A_ {32} = (1- \ cos \ theta) e_ {3} e_ {2} + e_ {1} \ sin \ theta \\ A_ {33} = (1- \ cos \ theta) e_ {3} ^ {2} + \ cos \ theta \ end {align}}}

Матрица вращения ↔ кватернион

При вычислении кватерниона из матрицы вращения существует неоднозначность знака, поскольку q и - q представляют nt того же вращения.

Один из способов вычисления кватерниона

q = [qiqjqkqr] = qii + qjj + qkk + qr {\ displaystyle \ mathbf {q} = {\ begin {bmatrix} q_ {i} \\ q_ {j} \\ q_ {k} \\ q_ {r} \ end {bmatrix}} = q_ {i} \ mathbf {i} + q_ {j} \ mathbf {j} + q_ {k} \ mathbf {k } + q_ {r}}{\ displaystyle \ mathbf {q} = {\ begin {bmatrix} q_ {i} \\ q_ {j} \\ q_ {k} \\ q_ {r} \ end {bmatrix} } = q_ {i} \ mathbf {i} + q_ {j} \ mathbf {j} + q_ {k} \ mathbf {k} + q_ {r}}

из матрицы вращения A имеет следующий вид:

qr = 1 2 1 + A 11 + A 22 + A 33 qi = 1 4 qr (A 32 - A 23) qj = 1 4 qr (A 13 - A 31) qk = 1 4 qr (A 21 - A 12) {\ displaystyle {\ begin {align} q_ {r} = {\ frac {1} { 2}} {\ sqrt {1 + A_ {11} + A_ {22} + A_ {33}}} \\ q_ {i} = {\ frac {1} {4q_ {r}}} \ left (A_ {32} -A_ {23} \ right) \\ q_ {j} = {\ frac {1} {4q_ {r}}} \ left (A_ {13} -A_ {31} \ right) \\ q_ {k} = {\ frac {1} {4q_ {r}}} \ left (A_ {21} -A_ {12} \ right) \ end {align}}}{\ displaystyle {\ begin {align} q_ {r} = {\ frac {1} {2}} {\ sqrt {1 + A_ {11} + A_ {22} + A_ {33}}} \\ q_ {i} = {\ frac {1 } {4q_ {r}}} \ left (A_ {32} -A_ {23} \ right) \\ q_ {j} = {\ frac {1} {4q_ {r}}} \ left (A_ {13 } -A_ {31} \ right) \\ q_ {k} = {\ frac {1} {4q_ {r}}} \ left (A_ {21} -A_ {12} \ right) \ end {выровнено} }}

Есть три других математически эквивалентных способа для вычисления q . Численную неточность можно уменьшить, избегая ситуаций, в которых знаменатель близок к нулю. Один из трех других методов выглядит следующим образом:

qi = 1 2 1 + A 11 - A 22 - A 33 qj = 1 4 qi (A 12 + A 21) qk = 1 4 qi (A 13 + A 31) qr = 1 4 ци (A 32 - A 23) {\ displaystyle {\ begin {выровнено} q_ {i} = {\ frac {1} {2}} {\ sqrt {1 + A_ {11} -A_ {22} -A_ {33}}} \\ q_ {j} = {\ frac {1} {4q_ {i}}} \ left (A_ {12} + A_ {21} \ right) \\ q_ { k} = {\ frac {1} {4q_ {i}}} \ left (A_ {13} + A_ {31} \ right) \\ q_ {r} = {\ frac {1} {4q_ {i }}} \ left (A_ {32} -A_ {23} \ right) \ end {align}}}{\ displaystyle {\ begin {align} q_ {i} = {\ frac {1} {2}} {\ sqrt {1 + A_ {11} -A_ {22} -A_ {33}}} \\ q_ {j} = {\ frac {1} {4q_ {i}}} \ left (A_ {12} + A_ {21} \ right) \\ q_ {k} = {\ frac {1} {4q_ {i}}} \ left (A_ {13} + A_ {31} \ right) \\ q_ {r} = {\ frac {1} {4q_ {i}}} \ left (A_ {32} -A_ {23} \ right) \ end {align}}}

Матрица вращения, соответствующая кватерниону q, может быть вычислена следующим образом:

A = (qr 2 - q ˇ T q ˇ) я 3 + 2 q ˇ q ˇ T + 2 qr Q {\ displaystyle \ mathbf {A} = \ left (q_ {r} ^ {2} - {\ check {\ mathbf {q}}} ^ {\ mathsf {T}} {\ check {\ mathbf {q}}} \ right) \ mathbf {I} _ {3} +2 {\ check {\ mathbf {q} }} {\ check {\ mathbf {q}}} ^ {\ mathrm {T}} + 2q_ {r} \ mathbf {\ mathcal {Q}}}{\ displaystyle \ mathbf {A} = \ left (q_ {r} ^ {2} - {\ check {\ mathbf {q}}} ^ {\ mathsf {T }} {\ check {\ mathbf {q}}} \ right) \ mathbf {I} _ {3} +2 {\ check {\ mathbf {q}}} {\ check {\ mathbf {q}}} ^ {\ mathrm {T}} + 2q_ {r} \ mathbf {\ mathcal {Q}}}

где

q ˇ = [qiqjqk], Q = [0 - qkqjqk 0 - qi - qjqi 0] {\ displaystyle {\ check {\ mathbf {q}}} = {\ begin {bmatrix} q_ {i} \\ q_ {j} \\ q_ {k} \ end {bmatrix}} \,, \ quad \ mat hbf {\ mathcal {Q}} = {\ begin {bmatrix} 0 -q_ {k} q_ {j} \\ q_ {k} 0 -q_ {i} \\ - q_ {j} q_ {i} 0 \ end {bmatrix}}}{\ displaystyle {\ check {\ mathbf {q}}} = {\ begin {bmatrix} q_ {i} \\ q_ {j} \\ q_ { k} \ end {bmatrix}} \,, \ quad \ mathbf {\ mathcal {Q}} = {\ begin {bmatrix} 0 -q_ {k} q_ {j} \\ q_ {k} 0 -q_ {i } \\ - q_ {j} q_ {i} 0 \ end {bmatrix}}}

, что дает

A = [1 - 2 qj 2 - 2 qk 2 2 (qiqj - qkqr) 2 (qiqk + qjqr) 2 (qiqj + qkqr) 1 - 2 qi 2 - 2 qk 2 2 (qjqk - qiqr) 2 (qiqk - qjqr) 2 (qiqr + qjqk) 1 - 2 qi 2 - 2 qj 2] {\ displaystyle \ mathbf {A} = {\ begin {bmatrix} 1-2q_ { j} ^ {2} -2q_ {k} ^ {2} 2 \ left (q_ {i} q_ {j} -q_ {k} q_ {r} \ right) 2 \ left (q_ {i} q_ {k } + q_ {j} q_ {r} \ right) \\ 2 \ left (q_ {i} q_ {j} + q_ {k} q_ {r} \ right) 1-2q_ {i} ^ {2} - 2q_ {k} ^ {2} 2 \ left (q_ {j} q_ {k} -q_ {i} q_ {r} \ right) \\ 2 \ left (q_ {i} q_ {k} -q_ {j } q_ {r} \ right) 2 \ left (q_ {i} q_ {r} + q_ {j} q_ {k} \ right) 1-2q_ {i} ^ {2} -2q_ {j} ^ {2 } \ end {bmatrix}}}{\ displaystyle \ mathbf {A} = {\ begin {bmatrix} 1-2q_ {j} ^ {2} -2q_ {k} ^ {2} 2 \ left (q_ {i} q_ {j} -q_ {k} q_ {r} \ right) 2 \ left (q_ {i} q_ {k} + q_ {j} q_ {r} \ right) \\ 2 \ left (q_ {i} q_ {j} + q_ {k} q_ {r} \ right) 1-2q_ {i} ^ {2} -2q_ {k } ^ {2} 2 \ left (q_ {j} q_ {k} -q_ {i} q_ {r} \ right) \\ 2 \ left (q_ {i} q_ {k} -q_ {j} q_ { r} \ right) 2 \ left (q_ {i} q_ {r} + q_ {j} q_ {k} \ right) 1-2q_ {i} ^ {2} -2q_ {j} ^ {2} \ end {bmatrix}}}

или эквивалентно

A = [- 1 + 2 qi 2 + 2 qr 2 2 (qiqj - qkqr) 2 (qiqk + qjqr) 2 (qiqj + qkqr) - 1 + 2 qj 2 + 2 qr 2 2 (qjqk - qiqr) 2 (qiqk - qjqr) 2 (qiqr + qjqk) - 1 + 2 qk 2 + 2 qr 2] {\ displaystyle \ mathbf {A} = {\ begin {bmatrix } -1 + 2q_ {i} ^ {2} + 2q_ {r } ^ {2} 2 \ left (q_ {i} q_ {j} -q_ {k} q_ {r} \ right) 2 \ left (q_ {i} q_ {k} + q_ {j} q_ {r}) \ right) \\ 2 \ left (q_ {i} q_ {j} + q_ {k} q_ {r} \ right) - 1 + 2q_ {j} ^ {2} + 2q_ {r} ^ {2} 2 \ left (q_ {j} q_ {k} -q_ {i} q_ {r} \ right) \\ 2 \ left (q_ {i} q_ {k} -q_ {j} q_ {r} \ right) 2 \ влево (q_ {i} q_ {r} + q_ {j} q_ {k} \ right) -1 + 2q_ {k} ^ {2} + 2q_ {r} ^ {2} \ end {bmatrix}}}{\ displaystyle \ mathbf {A} = {\ begin {bmatrix} -1 + 2q_ {i} ^ {2} + 2q_ {r} ^ {2} 2 \ left (q_ {i} q_ {j} -q_ {k} q_ {r} \ right) 2 \ left (q_ {i} q_ {k} + q_ {j} q_ {r} \ right) \\ 2 \ left (q_ {i} q_ {j} + q_ {k} q_ {r} \ right) - 1 + 2q_ {j} ^ {2} + 2q_ {r} ^ {2} 2 \ left (q_ {j} q_ {k} -q_ {i} q_ {r} \ right) \\ 2 \ left (q_ {i} q_ {k } -q_ {j} q_ {r} \ right) 2 \ left (q_ {i} q_ {r} + q_ {j} q_ {k} \ right) - 1 + 2q_ {k} ^ {2} + 2 q_ {r} ^ {2} \ end {bmatrix}}}

Углы Эйлера ↔ кватернион

Углы Эйлера (внешние zxz) → кватернион

Мы рассмотрим x-соглашение 3-1-3 внешние углы Эйлера для следующего алгоритма. Условия алгоритма зависят от используемого соглашения.

Мы можем вычислить кватернион

q = [qiqjqkqr] = qii + qjj + qkk + qr {\ displaystyle \ mathbf {q} = {\ begin {bmatrix} q_ {i} \\ q_ { j} \\ q_ {k} \\ q_ {r} \ end {bmatrix}} = q_ {i} \ mathbf {i} + q_ {j} \ mathbf {j} + q_ {k} \ mathbf {k} + q_ {r}}{\ displaystyle \ mathbf {q} = {\ begin {bmatrix} q_ {i} \\ q_ {j} \\ q_ {k} \\ q_ {r} \ end {bmatrix} } = q_ {i} \ mathbf {i} + q_ {j} \ mathbf {j} + q_ {k} \ mathbf {k} + q_ {r}}

из углов Эйлера (φ, θ, ψ) следующим образом:

qi = cos ⁡ ϕ - ψ 2 sin ⁡ θ 2 qj = sin ⁡ ϕ - ψ 2 sin ⁡ θ 2 qk знак равно грех ⁡ ϕ + ψ 2 соз ⁡ θ 2 qr = соз ⁡ ϕ + ψ 2 соз ⁡ θ 2 {\ displaystyle {\ begin {align} q_ {i} = \ cos {\ frac {\ phi - \ psi } {2}} \ sin {\ frac {\ theta} {2}} \\ q_ {j} = \ sin {\ frac {\ phi - \ psi} {2}} \ sin {\ frac {\ theta } {2}} \\ q_ {k} = \ sin {\ frac {\ phi + \ psi} {2}} \ cos {\ frac {\ theta} {2}} \\ q_ {r} = \ cos {\ frac {\ phi + \ psi} {2}} \ cos {\ frac {\ theta} {2}} \ end {align}}}{\ displaystyle {\ begin {align} q_ {i} = \ cos { \ frac {\ phi - \ psi} {2}} \ sin {\ frac {\ theta} {2}} \\ q_ {j} = \ sin {\ frac {\ phi - \ psi} {2}} \ sin {\ frac {\ theta} {2}} \\ q_ {k} = \ sin {\ frac {\ phi + \ psi} {2}} \ cos {\ frac {\ theta} {2}} \\ q_ {r} = \ cos {\ frac {\ phi + \ psi} {2}} \ cos {\ frac {\ theta} {2}} \ end {align}}}

углы Эйлера (внутренние zy′-x ″) → кватернион

Кватернион, эквивалентный углам рыскания (ψ), тангажа (θ) и крена (φ). или внутренние углы Тейта – Брайана в соответствии с соглашением zy′-x ″, могут быть вычислены как

qi = sin ⁡ ϕ 2 cos ⁡ θ 2 cos ⁡ ψ 2 - cos ⁡ ϕ 2 sin ⁡ θ 2 sin ⁡ ψ 2 qj = cos ⁡ ϕ 2 sin ⁡ θ 2 cos ⁡ ψ 2 + sin ⁡ ϕ 2 cos ⁡ θ 2 sin ⁡ ψ 2 qk = cos ⁡ ϕ 2 cos ⁡ θ 2 sin ⁡ ψ 2 - грех ⁡ ϕ 2 грех ⁡ θ 2 соз ⁡ ψ 2 qr = соз ⁡ ϕ 2 соз ⁡ θ 2 соз ⁡ ψ 2 + грех ⁡ ϕ 2 грех ⁡ θ 2 грех ⁡ ψ 2 {\ displaystyle {\ begin {выровнено } q_ {i} = \ sin {\ frac {\ phi} {2}} \ cos {\ frac {\ theta} {2}} \ cos {\ frac {\ psi} {2}} - \ cos { \ frac {\ phi} {2}} \ sin {\ frac {\ theta} {2}} \ sin {\ frac {\ psi} {2}} \\ q_ {j} = \ cos {\ frac { \ phi} {2}} \ sin {\ frac {\ theta} {2}} \ cos {\ frac {\ psi} {2}} + \ sin {\ frac {\ phi} {2}} \ cos { \ frac {\ theta} {2}} \ sin {\ frac {\ psi} {2}} \\ q_ {k} = \ cos {\ frac {\ phi} {2}} \ cos {\ frac { \ theta} {2}} \ sin {\ frac {\ psi} {2}} - \ sin {\ frac {\ phi} {2}} \ sin {\ frac {\ theta} {2}} \ cos { \ frac {\ psi} {2}} \\ q_ {r} = \ cos {\ frac {\ phi} {2}} \ cos {\ frac {\ theta} {2}} \ cos {\ frac { \ psi} {2}} + \ sin {\ frac {\ phi} {2}} \ sin {\ frac {\ theta} {2}} \ sin {\ frac {\ psi} {2}} \ end {align}}}{\ displaystyle {\ begin {align} q_ {i} = \ sin { \ frac {\ phi} {2}} \ cos {\ frac {\ theta} {2}} \ cos {\ frac {\ psi} {2}} - \ cos {\ frac {\ phi} {2}} \ sin {\ frac {\ theta} {2}} \ sin {\ frac {\ psi} {2}} \\ q_ {j} = \ cos {\ frac {\ phi} {2}} \ sin {\ frac {\ theta} {2}} \ cos {\ frac {\ psi} {2}} + \ sin {\ frac {\ phi} {2}} \ cos {\ frac {\ theta} {2}} \ sin {\ frac {\ psi} {2}} \\ q_ {k} = \ cos {\ frac {\ phi} {2}} \ cos {\ frac {\ theta} {2}} \ sin {\ frac {\ psi} {2}} - \ sin {\ frac {\ phi} {2}} \ sin {\ frac {\ theta} {2}} \ cos {\ frac {\ psi} {2}} \\ q_ {r} = \ cos {\ frac {\ phi} {2}} \ cos {\ frac {\ theta} {2}} \ cos {\ frac {\ psi} {2}} + \ sin {\ frac {\ phi} {2}} \ sin {\ гидроразрыв {\ theta} {2}} \ sin {\ frac {\ psi} {2}} \ end {выравнивается}}}

Кватернион → углы Эйлера (zxz extrinsic)

Учитывая кватернион вращения

q = [qiqjqkqr] = qii + qjj + qkk + qr, {\ displaystyle \ mathbf {q} = {\ begin {bmatrix} q_ {i} \\ q_ {j} \\ q_ {k} \\ q_ {r} \ end {bmatrix}} = q_ { i} \ mathbf {i} + q_ {j} \ mathbf {j} + q_ {k} \ mathbf {k} + q_ {r} \,,}{\ displaystyle \ mathbf {q} = {\ begin {bmatrix} q_ {i} \\ q_ {j} \\ q_ {k} \\ q_ {r} \ end {bmatrix}} = q_ {i} \ mathbf {i } + q_ {j} \ mathbf {j} + q_ {k} \ mathbf {k} + q_ {r} \,,}

x-соглашение 3-1-3 внешние углы Эйлера (φ, θ, ψ) можно вычислить по формуле

ϕ = atan2 ⁡ ((qiqk + qjqr), - (qjqk - qiqr)) θ = arccos ⁡ (- qi 2 - qj 2 + qk 2 + qr 2) ψ знак равно atan2 ⁡ ((qiqk - qjqr), (qjqk + qiqr)) {\ displaystyle {\ begin {align} \ phi = \ operatorname {atan2} \ left (\ left (q_ { i} q_ {k} + q_ {j} q_ {r} \ right), - \ left (q_ {j} q_ {k} -q_ {i} q_ {r} \ right) \ right) \\\ theta = \ arccos \ left (-q_ {i} ^ {2} -q_ {j} ^ {2} + q_ {k} ^ {2} + q_ {r} ^ {2} \ right) \\\ psi = \ operatorname {atan2} \ left (\ left (q_ {i} q_ {k} -q_ {j} q_ {r} \ right), \ left (q_ {j} q_ {k} + q_ {i}) q_ {r} \ right) \ right) \ end {align}}}{\ displaystyle {\ begin {align} \ phi = \ operatorname {atan2} \ left (\ left (q_ {i} q_ {k} + q_ {j} q_ {r} \ right), - \ left (q_ {j} q_ {k} -q_ {i} q_ {r} \ right) \ right) \ \\ theta = \ arccos \ left (-q_ {i} ^ {2} -q_ {j} ^ {2} + q_ {k} ^ {2} + q_ {r} ^ {2} \ right) \ \\ psi = \ operatorname {atan2} \ left (\ left (q_ {i} q_ {k} -q_ {j} q_ {r} \ right), \ left (q_ {j} q_ {k} + q_ {i} q_ {r} \ right) \ right) \ end {align}}}

Кватернион → углы Эйлера (zy′-x ″ внутренний)

Учитывая кватернион вращения

q = [qiqjqkqr] = qii + qjj + qkk + qr, {\ displaystyle \ mathbf {q} = {\ begin {bmatrix} q_ {i} \\ q_ {j} \ \ q_ {k} \\ q_ {r} \ end {bmatrix}} = q_ {i} \ mathbf {i} + q_ {j} \ mathbf {j} + q_ {k} \ mathbf {k} + q_ { r} \,,}{\ displaystyle \ mathbf {q} = {\ begin {bmatrix} q_ {i} \\ q_ {j} \\ q_ {k} \\ q_ {r} \ end {bmatrix}} = q_ {i} \ mathbf {i } + q_ {j} \ mathbf {j} + q_ {k} \ mathbf {k} + q_ {r} \,,}

рыскание, тангаж и углы крена или внутренние углы Тейта – Брайана, следующие за zy′-x ″ по соглашению, можно вычислить как

roll = atan2 ⁡ (2 (qrqi + qjqk), 1-2 (qi 2 + qj 2)) pitch = arcsin ⁡ (2 (qrqj - qkqi)) yaw = atan2 ⁡ (2 (qrqk + qiqj), 1-2 (qj 2 + qk 2)) {\ displaystyle {\ begin {align} {\ text {roll}} = \ operatorname {atan2} \ left (2 \ left (q_ {r } q_ {i} + q_ {j} q_ {k} \ right), 1-2 \ left (q_ {i} ^ {2} + q_ {j} ^ {2} \ right) \ right) \\ { \ text {pitch}} = \ arcsin \ left (2 \ left (q_ {r} q_ {j} -q_ {k} q_ {i} \ right) \ right) \\ {\ text {yaw}} = \ operatorname {atan2} \ left (2 \ left (q_ {r} q_ {k} + q_ {i} q_ {j} \ right), 1-2 \ left (q_ {j} ^ {2} + q_ {k} ^ {2} \ right) \ right) \ end {align}}}{\ displaystyle {\ begin {align} {\ text {roll}} = \ operatorname {atan2} \ left (2 \ left (q_ {r} q_ {i} + q_ {j} q_ {k} \ right), 1-2 \ left (q_ {i} ^ {2} + q_ {j} ^ {2} \ right) \ right) \\ {\ text {pitch}} = \ arcsin \ left (2 \ left (q_ {r} q_ {j} -q_ {k } q_ {i} \ right) \ right) \\ {\ text {yaw}} = \ operatorname {atan2} \ left (2 \ left (q_ {r} q_ {k} + q_ {i} q_ {j } \ right), 1-2 \ left (q_ {j} ^ {2} + q_ {k} ^ {2} \ right) \ right) \ end {align}}}

Ось Эйлера – угол ↔ кватернион

Учитывая Ось Эйлера ê и угол θ, кватернион

q = [qiqjqkqr] = qii + qjj + qkk + qr, {\ displaystyle \ mathbf {q} = {\ begin {bmatrix} q_ {i } \\ q_ {j} \\ q_ {k} \\ q_ {r} \ end {bmatrix}} = q_ {i} \ mathbf {i} + q_ {j} \ mathbf {j} + q_ {k} \ mathbf {k} + q_ {r} \,,}{\ displaystyle \ mathbf {q} = {\ begin {bmatrix} q_ {i} \\ q_ {j} \\ q_ {k} \\ q_ {r} \ end {bmatrix}} = q_ {i} \ mathbf {i } + q_ {j} \ mathbf {j} + q_ {k} \ mathbf {k} + q_ {r} \,,}

можно вычислить как

qi = e ^ 1 sin ⁡ θ 2 qj = e ^ 2 sin ⁡ θ 2 qk = e ^ 3 sin ⁡ θ 2 qr = соз ⁡ θ 2 {\ displaystyle {\ begin {align} q_ {i} = {\ hat {e}} _ {1} \ sin {\ frac {\ theta} {2}} \\ q_ { j} = {\ hat {e}} _ {2} \ sin {\ frac {\ theta} {2}} \\ q_ {k} = {\ hat {e}} _ {3} \ sin { \ frac {\ theta} {2}} \\ q_ {r} = \ cos {\ frac {\ theta} {2}} \ end {align}}}{\ displaystyle {\ begin {align} q_ {i} = {\ hat {e}} _ {1} \ sin {\ frac {\ theta} {2}} \\ q_ {j} = {\ hat {e}} _ {2} \ sin {\ frac {\ theta} {2}} \\ q_ {k} = {\ hat {e} } _ {3} \ sin {\ frac {\ theta} {2}} \\ q_ {r} = \ cos {\ frac {\ theta} {2}} \ end {align}}}

Учитывая кватернион вращения q, определите

q ˇ = [qiqjqk]. {\ displaystyle {\ check {\ mathbf {q}}} = {\ begin {bmatrix} q_ {i} \\ q_ {j} \\ q_ {k} \ end {bmatrix}} \,.}{\ displaystyle {\ check {\ mathbf {q}}} = {\ begin {bmatrix} q_ {i} \\ q_ {j} \ \ q_ {k} \ end {bmatrix}} \,.}

Тогда ось Эйлера ê и угол θ могут быть вычислены с помощью

e ^ = q ˇ ‖ q ˇ ‖ θ = 2 arccos ⁡ qr {\ displaystyle {\ begin {align} {\ hat {\ mathbf {e}}} = {\ frac {\ check {\ mathbf {q}}} {\ left \ | {\ check {\ mathbf {q}}} \ right \ |}} \\\ theta = 2 \ arccos q_ {r} \ end {align}}}{\ displaystyle {\ begin {align} {\ hat {\ mathbf {e}}} = {\ frac {\ check {\ mathbf {q}}} {\ left \ | {\ check {\ mathbf { q}}} \ right \ |}} \\\ theta = 2 \ arccos q_ {r} \ end {align}}}
Формулы преобразования для производных

Матрица вращения ↔ угловые скорости

Вектор угловой скорости

ω = [ω x ω Y ω Z] {\ Displaystyle {\ boldsymbol {\ omega}} = {\ begin {bmatrix} \ omega _ {x} \\\ omega _ {y} \\\ omega _ {z} \ end {bmatrix} }}{\ displaystyle {\ boldsymbol {\ omega}} = {\ begin {bmatrix} \ omega _ {x} \\\ omega _ {y} \\\ omega _ {z} \ end {bmatrix}}}

можно извлечь из производной по времени матрицы вращения d A / dt с помощью следующего соотношения:

[ω] × = [0 - ω z ω Y ω Z 0 - ω Икс - ω Y ω Икс 0] знак равно d A dt AT {\ displaystyle [{\ boldsymbol {\ omega}}] _ {\ times} = {\ begin {bmatrix} 0 - \ omega _ {z} \ omega _ {y} \\\ omega _ {z} 0 - \ omega _ {x} \\ - \ omega _ {y} \ omega _ {x} 0 \ end {bmatrix}} = {\ frac {\ mathrm {d } \ mathbf {A}} {\ mathrm {d} t}} \ mathbf {A} ^ {\ mathsf {T}}}{\ displaystyle [{\ boldsymbol {\ omega}}] _ {\ times } = {\ begin {bmatrix} 0 - \ omega _ {z} \ omega _ {y} \\\ omega _ {z} 0 - \ omega _ {x} \\ - \ omega _ {y} \ omega _ {x} 0 \ end {bmatrix}} = {\ frac {\ mathrm {d} \ mathbf {A}} {\ mathrm {d} t}} \ mathbf {A} ^ {\ mathsf {T}} }

Вывод адаптирован из Иоффе следующим образом:

Для любого вектор r0, рассмотрим r (t) = A (t) r0и дифференцируем его:

drdt = d A dtr 0 = d A dt AT (t) р (T) {\ Displaystyle {\ frac {\ mathrm {d} \ mathbf {r}} {\ mathrm {d} t}} = {\ frac {\ mathrm {d} \ mathbf {A}} {\ mathrm {d} t}} \ mathbf {r} _ {0} = {\ frac {\ mathrm {d} \ mathbf {A}} {\ mathrm {d} t}} \ mathbf {A} ^ {\ mathsf {T}} (t) \ mathrm {r} (t)}{\ displaystyle {\ frac {\ mathrm {d} \ mathbf {r}} {\ mathrm {d} t}} = {\ frac {\ mathrm {d} \ mathbf {A}} {\ mathrm {d} t}} \ mathbf {r} _ {0} = {\ гидроразрыв {\ mathrm {d} \ mathbf {A}} {\ mathrm {d} t}} \ mathbf {A} ^ {\ mathsf {T}} (t) \ mathrm {r} (t)}

Производная вектора - это линейная скорость его кончика. Поскольку A является матрицей вращения, по определению длина r (t) всегда равна длине r0, и, следовательно, она не изменяется со временем. Таким образом, когда r (t) вращается, его острие движется по окружности, и линейная скорость его острия является касательной к окружности; т.е. всегда перпендикулярно r (t). В этом конкретном случае связь между вектором линейной скорости и вектором угловой скорости составляет

drdt = ω (t) × r (t) = [ω] × r (t) {\ displaystyle {\ frac {\ mathrm {d} \ mathbf {r}} {\ mathrm {d} t}} = {\ boldsymbol {\ omega}} (t) \ times \ mathbf {r} (t) = [{\ boldsymbol {\ omega}} ] _ {\ times} \ mathbf {r} (t)}{\ displaystyle {\ frac {\ mathrm {d} \ mathbf {r}} {\ mathrm {d} t}} = { \ boldsymbol {\ omega}} (t) \ times \ mathbf {r} (t) = [{\ boldsymbol {\ omega}}] _ {\ times} \ mathbf {r} (t)}

(см. круговое движение и векторное произведение ).

Согласно транзитивности вышеуказанных уравнений,

d A dt AT (t) r (t) = [ω] × r (t) {\ displaystyle {\ frac { \ mathrm {d} \ mathbf {A}} {\ mathrm {d} t}} \ mathbf {A} ^ {\ mathsf {T}} (t) \ mathbf {r} (t) = [{\ boldsymbol { \ omega}}] _ {\ times} \ mathbf {r} (t)}{\ displaystyle {\ frac { \ mathrm {d} \ mathbf {A}} {\ mathrm {d} t}} \ mathbf {A} ^ {\ mathsf {T}} (t) \ mathbf {r} (t) = [{\ boldsymbol { \ omega}}] _ {\ times} \ mathbf {r} (t)}

, что означает

d A dt AT (t) = [ω] × {\ displaystyle {\ frac {\ mathrm {d } \ mathbf {A}} {\ mathrm {d} t}} \ mathbf {A} ^ {\ mathsf {T}} (t) = [{\ boldsymbol {\ omega}}] _ {\ times}}{\ displaystyle {\ frac {\ mathrm {d} \ mathbf {A}} {\ mathrm {d} t}} \ mathbf {A} ^ {\ mathsf {T}} (t) = [{\ boldsymbol {\ omega}}] _ {\ times}}

Кватернион ↔ угловые скорости

Вектор угловой скорости

ω = [ω x ω y ω z] {\ displaystyle {\ boldsymbol {\ omega}} = {\ begin {bmatrix} \ omega _ {x} \\\ omega _ {y} \\\ omega _ {z} \ end {bmatrix}}}{\ displaystyle {\ boldsymbol {\ omega}} = {\ begin {bmatrix} \ omega _ {x} \\\ omega _ {y} \\\ omega _ {z} \ end {bmatrix}}}

можно получить из производной кватерниона d q / dt следующим образом :

[0 ω x ω y ω z] = 2 dqdtq ~ {\ displaystyle {\ begin {bmatrix} 0 \\\ omega _ {x} \\\ omega _ {y} \\\ omega _ {z } \ end {bmatrix}} = 2 {\ frac {\ mathrm {d} \ mathbf {q}} {\ mathrm {d} t}} {\ tilde {\ mathbf {q}}}}{\ displaystyle {\ begin {bmatrix} 0 \\\ omega _ {x} \\\ omega _ {y} \\\ omega _ {z} \ end {bmatrix}} = 2 {\ frac {\ mathrm {d} \ mathbf {q} } {\ mathrm {d} t}} {\ tilde {\ mathbf {q}}}}

где д ~ {\ textstyle {\ тильда { \ mathbf {q}}}}{\ textstyle {\ tilde {\ mathbf {q}}}} - это сопряжение (обратное) q {\ textstyle \ mathbf {q}}{\ textstyle \ mathbf {q }} .

И наоборот, производная кватерниона

dqdt = 1 2 [0 ω x ω y ω z] q. {\ displaystyle {\ frac {\ mathrm {d} \ mathbf {q}} {\ mathrm {d} t}} = {\ frac {1} {2}} {\ begin {bmatrix} 0 \\\ omega _ {x} \\\ omega _ {y} \\\ omega _ {z} \ end {bmatrix}} \ mathbf {q} \,.}{\ displaystyle {\ frac {\ mathrm {d} \ mathbf {q}} {\ mathrm {d} t}} = {\ frac { 1} {2}} {\ begin {bmatrix} 0 \\\ omega _ {x} \\\ omega _ {y} \\\ omega _ {z} \ end {bmatrix}} \ mathbf {q} \,.}
Роторы в геометрической алгебре

Формализм геометрической алгебры (GA) обеспечивает расширение и интерпретацию метода кватернионов. Центральное место в GA занимает геометрическое произведение векторов, расширение традиционных внутреннего и перекрестных произведений, задаваемых формулой

ab = a ⋅ b + a ∧ b {\ displaystyle \ mathbf {ab} = \ mathbf {a} \ cdot \ mathbf {b} + \ mathbf {a} \ wedge \ mathbf {b}}{\ displaystyle \ mathbf {ab} = \ mathbf { a} \ cdot \ mathbf {b} + \ mathbf {a} \ wedge \ mathbf {b}}

где символ ∧ обозначает внешний продукт или продукт клина. Это произведение векторов a и b дает два члена: скалярную часть из внутреннего произведения и бивекторную часть из произведения клина. Этот бивектор описывает плоскость, перпендикулярную тому, что должно возвращать векторное произведение векторов.

Бивекторы в GA обладают некоторыми необычными свойствами по сравнению с векторами. Под геометрическим произведением бивекторы имеют отрицательный квадрат: бивектор x̂ŷ описывает плоскость xy. Его квадрат равен (x̂ŷ ) = x̂ŷx̂ŷ . Поскольку единичные базисные векторы ортогональны друг другу, геометрическое произведение сводится к антисимметричному внешнему произведению - x̂ и ŷ можно свободно менять местами с коэффициентом -1. Квадрат уменьшается до - x̂x̂ŷŷ = −1, поскольку сами базисные векторы равны +1.

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

R = exp ⁡ (- B ^ θ 2) = cos ⁡ θ 2 - B ^ sin ⁡ θ 2, {\ displaystyle \ mathbf {R } = \ exp \ left ({\ frac {- {\ hat {\ mathbf {B}}} \ theta} {2}} \ right) = \ cos {\ frac {\ theta} {2}} - {\ hat {\ mathbf {B}}} \ sin {\ frac {\ theta} {2}} \,,}{\ displaystyle \ mathbf {R} = \ exp \ left ({\ frac {- {\ hat {\ mathbf {B }}} \ theta} {2}} \ right) = \ cos {\ frac {\ theta} {2}} - {\ hat {\ mathbf {B}}} \ sin {\ frac {\ theta} {2 }} \,,}

где B̂ - единичный бивектор, описывающий плоскость вращения . Поскольку B̂ возводится в квадрат -1, разложение степенного ряда для R генерирует тригонометрические функции. Формула вращения, которая отображает вектор a на повернутый вектор b, тогда имеет вид

b = R a R † {\ displaystyle \ mathbf {b} = \ mathbf {RaR} ^ {\ dagger}}{\ displaystyle \ mathbf {b} = \ mathbf {RaR} ^ {\ dagger}}

где

R † = exp ⁡ (1 2 B ^ θ) = cos ⁡ θ 2 + B ^ sin ⁡ θ 2 {\ displaystyle \ mathbf {R} ^ {\ dagger} = \ exp \ left ({\ frac {1} {2}} {\ hat {\ mathbf {B}}} \ theta \ right) = \ cos {\ frac {\ theta} {2}} + {\ hat {\ mathbf {B}}} \ sin {\ frac {\ theta} {2}}}{\ displaystyle \ mathbf {R} ^ {\ dagger} = \ exp \ left ({\ frac {1} {2}} {\ hat {\ mathbf {B}}} \ theta \ right) = \ cos {\ frac {\ theta} {2}} + {\ hat {\ mathbf {B}}} \ sin {\ frac {\ theta} {2}}}

- это обратное R {\ displaystyle \ scriptstyle R}\ scriptstyle R (изменение порядка векторов в B {\ displaystyle \ scriptstyle B}\ scriptstyle B эквивалентно изменению его знака).

Пример. Вращение вокруг оси

v ^ = 1 3 (x ^ + y ^ + z ^) {\ displaystyle {\ hat {\ mathbf {v}}} = {\ frac { 1} {\ sqrt {3}}} \ left ({\ hat {\ mathbf {x}}} + {\ hat {\ mathbf {y}}} + {\ hat {\ mathbf {z}}} \ right)}{\ displaystyle {\ hat {\ mathbf {v}}} = {\ frac {1} {\ sqrt {3}}} \ left ({\ hat {\ mathbf {x}}} + {\ hat {\ mathbf {y}) }} + {\ hat {\ mathbf {z}}} \ right)}

можно получить, преобразовав v̂ в его двойной бивектор,

B ^ = x ^ y ^ z ^ v ^ = iv ^, {\ displaystyle {\ hat {\ mathbf { B}}} = {\ hat {\ mathbf {x}}} {\ hat {\ mathbf {y}}} {\ hat {\ mathbf {z}}} {\ hat {\ mathbf {v}}} = \ mathbf {i} {\ hat {\ mathbf {v}}} \,,}{\ displaystyle {\ hat {\ mathbf {B}}} = {\ hat { \ mathbf {x}}} {\ hat {\ mathbf {y}}} {\ hat {\ mathbf {z}}} {\ hat {\ mathbf {v}}} = \ mathbf {i} {\ hat { \ mathbf {v}}} \,,}

где i= x̂ŷẑ - элемент единичного объема, единственный тривектор (псевдоскаляр) в трехмерном пространстве. Результат:

B ^ = 1 3 (y ^ z ^ + z ^ x ^ + x ^ y ^). {\ displaystyle {\ hat {\ mathbf {B}}} = {\ frac {1} {\ sqrt {3}}} \ left ({\ hat {\ mathbf {y}}} {\ hat {\ mathbf { z}}} + {\ hat {\ mathbf {z}}} {\ hat {\ mathbf {x}}} + {\ hat {\ mathbf {x}}} {\ hat {\ mathbf {y}}} \ right) \,.}{\ displaystyle {\ hat {\ mathbf {B}}} = {\ frac {1} {\ sqrt {3}}} \ left ({\ hat {\ mathbf {y}}} {\ hat {\ mathbf {z}} } + {\ hat {\ mathbf {z}}} {\ hat {\ mathbf {x}}} + {\ hat {\ mathbf {x}}} {\ hat {\ mathbf {y}}} \ right) \,.}

Однако в трехмерном пространстве часто проще оставить выражение для B̂= iv̂, используя тот факт, что i коммутирует со всеми объектами в 3D, а также квадраты до −1. Тогда поворот вектора x̂ в этой плоскости на угол θ равен

x ^ ′ = R x ^ R † = e - iv ^ θ 2 x ^ eiv ^ θ 2 = x ^ cos 2 ⁡ θ 2 + я (x ^ v ^ - v ^ x ^) cos ⁡ θ 2 грех ⁡ θ 2 + v ^ x ^ v ^ sin 2 ⁡ θ 2 {\ displaystyle {\ hat {\ mathbf {x}} } '= \ mathbf {R} {\ hat {\ mathbf {x}}} \ mathbf {R} ^ {\ dagger} = e ^ {- \ mathbf {i} {\ hat {\ mathbf {v}}} {\ frac {\ theta} {2}}} {\ hat {\ mathbf {x}}} e ^ {i {\ hat {\ mathbf {v}}} {\ frac {\ theta} {2}}} = {\ hat {\ mathbf {x}}} \ cos ^ {2} {\ frac {\ theta} {2}} + \ mathbf {i} \ left ({\ hat {\ mathbf {x}}} { \ hat {\ mathbf {v}}} - {\ hat {\ mathbf {v}}} {\ hat {\ mathbf {x}}} \ right) \ cos {\ frac {\ theta} {2}} \ sin {\ frac {\ theta} {2}} + {\ hat {\ mathbf {v}}} {\ hat {\ mathbf {x}}} {\ hat {\ mathbf {v}}} \ sin ^ { 2} {\ frac {\ theta} {2}}}{\displaystyle {\hat {\mathbf {x} }}'=\mathbf {R} {\hat {\mathbf {x} }}\mathbf {R} ^{\dagger }=e^{-\mathbf {i} {\hat {\mathbf {v} }}{\frac {\theta }{2}}}{\hat {\mathbf {x} }}e^{i{\hat {\mathbf {v} }}{\frac {\theta }{2}}}={\hat {\mathbf {x} }}\cos ^{2}{\frac {\theta }{2}}+\mathbf {i} \left({\hat {\mathbf {x} }}{\hat {\mathbf {v} }}-{\hat {\mathbf {v} }}{\hat {\mathbf {x} }}\right)\cos {\frac {\theta }{2}}\sin {\frac {\theta }{2}}+{\hat {\mathbf {v} }}{\hat {\mathbf {x} }}{\hat {\mathbf {v} }}\sin ^{2}{\frac {\theta }{2}}}

Признавая, что

i (x ^ v ^ - v ^ x ^) = 2 i (x ^ ∧ v ^) {\ displaystyle \ mathbf { i} ({\ hat {\ mathbf {x}}} {\ hat {\ mathbf {v}}} - {\ hat {\ mathbf {v}}} {\ hat {\ mathbf {x}}}) = 2 \ mathbf {i} ({\ hat {\ mathbf {x}}} \ wedge {\ hat {\ mathbf {v}}})}{\ displaystyle \ mathbf {i} ({\ hat {\ mathbf {x }}} {\ hat {\ mathbf {v}}} - {\ hat {\ mathbf {v}}} {\ hat {\ mathbf {x}}}) = 2 \ mathbf {i} ({\ hat { \ mathbf {x}}} \ wedge {\ hat {\ mathbf {v}}})}

и что - v̂x̂v̂ является отражением x̂ относительно плоскости, перпендикулярной к v̂, дает геометрическую интерпретацию операции вращения: вращение сохраняет компоненты, которые параллельны v̂ и изменяют только перпендикулярные. Затем вычисляются члены:

v ^ x ^ v ^ = 1 3 (- x ^ + 2 y ^ + 2 z ^) 2 ix ^ ∧ v ^ = 2 i 1 3 (x ^ y ^ + x ^ z ^) = 2 3 (y ^ - z ^) {\ displaystyle {\ begin {align} {\ hat {\ mathbf {v}}} {\ hat {\ mathbf {x}}} {\ hat {\ mathbf {v}}} = {\ frac {1} {3}} \ left (- {\ hat {\ mathbf {x}}} + 2 {\ hat {\ mathbf {y}}} + 2 {\ hat {\ mathbf {z}}} \ right) \\ 2 \ mathbf {i} {\ hat {\ mathbf {x}}} \ wedge {\ hat {\ mathbf {v}}} = 2 \ mathbf {i } {\ frac {1} {\ sqrt {3}}} \ left ({\ hat {\ mathbf {x}}} {\ hat {\ mathbf {y}}} + {\ hat {\ mathbf {x}) }} {\ hat {\ mathbf {z}}} \ right) = {\ frac {2} {\ sqrt {3}}} \ left ({\ hat {\ mathbf {y}}} - {\ hat { \ mathbf {z}}} \ right) \ end {align}}}{\ displaystyle {\ begin {align} {\ hat {\ mathbf {v}}} {\ hat {\ mathbf {x}}} {\ hat {\ mathbf {v }}} = {\ frac {1} {3}} \ left (- {\ hat {\ mathbf {x}}} + 2 {\ hat {\ mathbf {y}}} + 2 {\ hat {\ mathbf {z}}} \ right) \\ 2 \ mathbf {i} {\ hat {\ mathbf {x}}} \ wedge {\ hat {\ mathbf {v}}} = 2 \ mathbf {i} { \ frac {1} {\ sqrt {3}}} \ left ({\ hat {\ mathbf {x}}} {\ hat {\ mathbf {y}}} + {\ hat {\ mathbf {x}}} {\ hat {\ mathbf {z}}} \ right) = {\ frac {2} {\ sqrt {3}}} \ left ({\ hat {\ mathbf {y}}} - {\ hat {\ mathbf {z}}} \ right) \ end {align}}}

Тогда результат поворота будет

x ^ ′ = x ^ (cos 2 ⁡ θ 2 - 1 3 sin 2 ⁡ θ 2) + 2 3 y ^ грех ⁡ θ 2 (грех ⁡ θ 2 + 3 cos ⁡ θ 2) + 2 3 z ^ sin ⁡ θ 2 (грех ⁡ θ 2-3 соз ⁡ θ 2) {\ displaystyle {\ hat { \ mathbf {x}}} '= {\ hat {\ mathbf {x}}} \ left (\ cos ^ {2} {\ frac {\ theta} {2}} - {\ frac {1} {3} } \ sin ^ {2} {\ frac {\ theta} {2}} \ right) + {\ frac {2} {3}} {\ hat {\ mathbf {y}}} \ si n {\ frac {\ theta} {2}} \ left (\ sin {\ frac {\ theta} {2}} + {\ sqrt {3}} \ cos {\ frac {\ theta} {2}} \ справа) + {\ frac {2} {3}} {\ hat {\ mathbf {z}}} \ sin {\ frac {\ theta} {2}} \ left (\ sin {\ frac {\ theta} { 2}} - {\ sqrt {3}} \ cos {\ frac {\ theta} {2}} \ right)}{\displaystyle {\hat {\mathbf {x} }}'={\hat {\mathbf {x} }}\left(\cos ^{2}{\frac {\theta }{2}}-{\frac {1}{3}}\sin ^{2}{\frac {\theta }{2}}\right)+{\frac {2}{3}}{\hat {\mathbf {y} }}\sin {\frac {\theta }{2}}\left(\sin {\frac {\theta }{2}}+{\sqrt {3}}\cos {\frac {\theta }{2}}\right)+{\frac {2}{3}}{\hat {\mathbf {z} }}\sin {\frac {\theta }{2}}\left(\sin {\frac {\theta }{2}}-{\sqrt {3}}\cos {\frac {\theta }{2}}\right)}

Простая проверка этого результата - угол θ = 2 / 3π. Такое вращение должно отображать x̂ в ŷ . Действительно, поворот сводится к

x ^ ′ = x ^ (1 4-1 3 3 4) + 2 3 y ^ 3 2 (3 2 + 3 1 2) + 2 3 z ^ 3 2 (3 2 - 3 1 2) = 0 x ^ + y ^ + 0 z ^ = y ^ {\ displaystyle {\ begin {align} {\ hat {\ mathbf {x}}} '= {\ hat {\ mathbf {x} }} \ left ({\ frac {1} {4}} - {\ frac {1}} {\ frac {3} {4}} \ right) + {\ frac {2} {3}} {\ hat {\ mathbf {y}}} {\ frac {\ sqrt {3}} {2}} \ left ({\ frac {\ sqrt {3}} {2}} + {\ sqrt {3}} {\ frac {1} {2}} \ right) + {\ frac {2} {3}} {\ hat {\ mathbf {z}}} {\ frac {\ sqrt {3}} {2}} \ left ({\ frac {\ sqrt {3}} {2}} - {\ sqrt {3}} {\ frac {1} {2}} \ right) \\ = 0 {\ hat {\ mathbf {x }}} + {\ hat {\ mathbf {y}}} + 0 {\ hat {\ mathbf {z}}} = {\ hat {\ mathbf {y}}} \ end {align}}}{\displaystyle {\begin{aligned}{\hat {\mathbf {x} }}'={\hat {\mathbf {x} }}\left({\frac {1}{4}}-{\frac {1}{3}}{\frac {3}{4}}\right)+{\frac {2}{3}}{\hat {\mathbf {y} }}{\frac {\sqrt {3}}{2}}\left({\frac {\sqrt {3}}{2}}+{\sqrt {3}}{\frac {1}{2}}\right)+{\frac {2}{3}}{\hat {\mathbf {z} }}{\frac {\sqrt {3}}{2}}\left({\frac {\sqrt {3}}{2}}-{\sqrt {3}}{\frac {1}{2}}\right)\\=0{\hat {\mathbf {x} }}+{\hat {\mathbf {y} }}+0{\hat {\mathbf {z} }}={\hat {\mathbf {y} }}\end{aligned}}}

именно так, как ожидалось. Эта формула поворота действительна не только для векторов, но и для любого многовекторного . Кроме того, использование углов Эйлера значительно снижает сложность операции. Составные повороты происходят от умножения роторов, поэтому общий ротор из углов Эйлера равен

R = R γ ′ R β ′ R α = exp ⁡ (- iz ^ ′ γ 2) exp ⁡ (- ix ^ ′ β 2) ехр ⁡ (- iz ^ α 2) {\ Displaystyle \ mathbf {R} = \ mathbf {R} _ {\ gamma '} \ mathbf {R} _ {\ beta'} \ mathbf {R} _ {\ alpha} = \ exp \ left ({\ frac {- \ mathbf {i} {\ hat {\ mathbf {z}}} '\ gamma} {2}} \ right) \ exp \ left ({\ frac {- \ mathbf {i} {\ hat {\ mathbf {x}}} '\ beta} {2}} \ right) \ exp \ left ({\ frac {- \ mathbf {i} {\ hat {\ mathbf {z}}) } \ alpha} {2}} \ right)}{\displaystyle \mathbf {R} =\mathbf {R} _{\gamma '}\mathbf {R} _{\beta '}\mathbf {R} _{\alpha }=\exp \left({\frac {-\mathbf {i} {\hat {\mathbf {z} }}'\gamma }{2}}\right)\exp \left({\frac {-\mathbf {i} {\hat {\mathbf {x} }}'\beta }{2}}\right)\exp \left({\frac {-\mathbf {i} {\hat {\mathbf {z} }}\alpha }{2}}\right)}

, но

x ^ ′ = R α x ^ R α † и z ^ ′ = R β ′ z ^ R β ′ †. {\ displaystyle {\ begin {align} {\ hat {\ mathbf {x}}} '= \ mathbf {R} _ {\ alpha} {\ hat {\ mathbf {x}}} \ mathbf {R} _ {\ alpha} ^ {\ dagger} \ quad {\ text {and}} \\ {\ hat {\ mathbf {z}}} '= \ mathbf {R} _ {\ beta'} {\ hat {\ mathbf {z}}} \ mathbf {R} _ {\ beta '} ^ {\ dagger} \,. \ end {align}}}{\displaystyle {\begin{aligned}{\hat {\mathbf {x} }}'=\mathbf {R} _{\alpha }{\hat {\mathbf {x} }}\mathbf {R} _{\alpha }^{\dagger }\quad {\text{and}}\\{\hat {\mathbf {z} }}'=\mathbf {R} _{\beta '}{\hat {\mathbf {z} }}\mathbf {R} _{\beta '}^{\dagger }\,.\end{aligned}}}

Эти роторы возвращаются из экспонент следующим образом:

R β 'знак равно соз ⁡ β 2 - я р α x ^ R α † грех ⁡ β 2 = R α R β R α † {\ displaystyle \ mathbf {R} _ {\ beta'} = \ cos {\ frac {\ бета} {2}} - \ mathbf {i} \ mathbf {R} _ {\ alpha} {\ hat {\ mathbf {x}}} \ mathbf {R} _ {\ alpha} ^ {\ dagger} \ sin {\ frac {\ beta} {2}} = \ mathbf {R} _ {\ alpha} \ mathbf {R} _ {\ beta} \ mathbf {R} _ {\ alpha} ^ {\ dagger}}{\displaystyle \mathbf {R} _{\beta '}=\cos {\frac {\beta }{2}}-\mathbf {i} \mathbf {R} _{\alpha }{\hat {\mathbf {x} }}\mathbf {R} _{\alpha }^{\dagger }\sin {\frac {\beta }{2}}=\mathbf {R} _{\alpha }\mathbf {R} _{\beta }\mathbf {R} _{\alpha }^{\dagger }}

, где Rβотносится к вращению в исходных координатах. Аналогично для поворота γ:

R γ ′ = R β ′ R γ R β ′ † = R α R β R α † R γ R α R β † R α †. {\ displaystyle \ mathbf {R} _ {\ gamma '} = \ mathbf {R} _ {\ beta'} \ mathbf {R} _ {\ gamma} \ mathbf {R} _ {\ beta '} ^ {\ кинжал} = \ mathbf {R} _ {\ alpha} \ mathbf {R} _ {\ beta} \ mathbf {R} _ {\ alpha} ^ {\ dagger} \ mathbf {R} _ {\ gamma} \ mathbf {R} _ {\ alpha} \ mathbf {R} _ {\ beta} ^ {\ dagger} \ mathbf {R} _ {\ alpha} ^ {\ dagger} \,.}{\displaystyle \mathbf {R} _{\gamma '}=\mathbf {R} _{\beta '}\mathbf {R} _{\gamma }\mathbf {R} _{\beta '}^{\dagger }=\mathbf {R} _{\alpha }\mathbf {R} _{\beta }\mathbf {R} _{\alpha }^{\dagger }\mathbf {R} _{\gamma }\mathbf {R} _{\alpha }\mathbf {R} _{\beta }^{\dagger }\mathbf {R} _{\alpha }^{\dagger }\,.}

Отмечая, что Rγи Rαкоммутируют (вращения в одной плоскости должны переключаться), и общий ротор становится

R = R α R β R γ {\ displaystyle \ mathbf {R} = \ mathbf {R} _ {\ alpha} \ mathbf {R} _ {\ beta} \ mathbf {R} _ {\ gamma}}{\ displaystyle \ mathbf {R} = \ mathbf {R} _ {\ alpha} \ mathbf {R} _ {\ beta} \ mathbf {R} _ {\ gamma}}

Таким образом, комбинированные повороты углов Эйлера становятся серией эквивалентных вращений в исходной фиксированной системе отсчета.

Хотя роторы в геометрической алгебре работают почти так же, как кватернионы в трех измерениях, сила этого формализма заключается в его универсальности: этот метод применим и применим в пространствах с любым количеством измерений. В 3D вращение имеет три степени свободы, по одной степени для каждой линейно независимой плоскости (бивектора), в которой может происходить вращение. Известно, что пары кватернионов могут использоваться для создания вращений в 4D, что дает шесть степеней свободы, и подход геометрической алгебры подтверждает этот результат: в 4D есть шесть линейно независимых бивекторов, которые могут использоваться в качестве генераторов вращений.

Угол-Угол-Угол

Вращения можно моделировать как ось и угол; как показано на гироскопе , ось которого проходит через ротор, и величина вращения вокруг этой оси, демонстрируемая вращением ротора; это вращение может быть выражено как a n g l e ∗ (a x i s) {\ displaystyle angle * (axis)}{\ displaystyle angle * (ось)} , где ось - это единичный вектор, определяющий направление оси ротора. От исходной точки в любом направлении идет одна и та же ось вращения с масштабом угла, эквивалентным расстоянию от исходной точки. Из любой другой точки пространства аналогично тот же вектор направления, применяемый относительно ориентации, представленной начальной точкой, а не исходной точкой, применяет то же изменение вокруг тех же осей, которые задает единичный вектор. a n g l e ∗ a x i s {\ displaystyle angle * axis}{\ displaystyle angle * axis} масштабирование каждой точки дает уникальную координату в нотации «угол-угол-угол». Разница между двумя координатами сразу дает единственную ось вращения и угол между двумя ориентациями.

Натуральный логарифм кватерниона представляет искривление пространства на 3 угла вокруг 3 осей вращения и выражается в длине дуги; аналогичны углам Эйлера, но не зависят от порядка. Существует формула произведения Ли, определяющая сложение вращений, которое состоит в том, что они являются суммой бесконечно малых шагов каждого вращения, применяемого последовательно; это означало бы, что вращения являются результатом применения всех вращений в один и тот же момент, а не последовательностью вращений, применяемых впоследствии.

Оси вращения выровнены по стандартным декартовым осям X, Y, Z {\ displaystyle X, Y, Z}X, Y, Z . Эти повороты можно просто складывать и вычитать, особенно когда вращаемые рамки прикреплены друг к другу, как в цепочках IK. Различия между двумя объектами, находящимися в одной системе отсчета, можно найти путем простого вычитания их ориентации. Вращения, которые применяются из внешних источников или исходят из источников относительно текущего вращения, по-прежнему требуют умножения, предусмотрено применение формулы Родригеса.

Вращение от каждой оси координат представляет собой поворот плоскости, перпендикулярной указанной оси, одновременно со всеми другими осями. Хотя меры можно рассматривать в углах, на самом деле представлением является длина дуги кривой; угол подразумевает поворот вокруг точки, где кривизна - это дельта, приложенная к текущей точке в инерциальном направлении.

Просто примечание: кватернионы бревна имеют кольца или октавы вращения; то есть для поворотов больше 4 π {\ displaystyle \ pi}\ pi имеют связанные кривые. Кривизна предметов, приближающихся к этой границе, кажется, хаотично прыгает по орбитам.

Для углов, "удобочитаемых человеком", можно использовать 1-норму, чтобы изменить масштаб углов, чтобы они выглядели более "подходящими"; во многом как Цельсия можно считать более правильным, чем Фаренгейт.

Q = [X Y Z] {\ displaystyle {Q} = {\ begin {bmatrix} X \\ Y \\ Z \ end {bmatrix}}}{\ displaystyle {Q} = {\ begin {bmatrix} X \\ Y \\ Z \ end {bmatrix}}}

Другие связанные значения выводятся немедленно:

| | V | | или г | | V | | 2 = Х Х + Y Y + Z Z | | V | | 1 = | X | + | Y | + | Z | {\ displaystyle {\ begin {matrix} || V || или || V || _ {2} = {\ sqrt {XX + YY + ZZ}} \\ || V || _ {1} = | X | + | Y | + | Z | \ end {matrix}}}{\ displaystyle {\ begin {matrix} || V || или || V || _ {2} = {\ sqrt {XX + YY + ZZ}} \\ || V || _ { 1} = | X | + | Y | + | Z | \ end {matrix}}}

Общий угол поворота....

θ = | | V | | {\ displaystyle \ theta = || V ||}{\ displaystyle \ theta = || V ||}

Ось вращения...

A xis (ln Q) = [X θ Y θ Z θ] {\ displaystyle Axis (lnQ) = {\ begin {bmatrix} {\ frac {X} {\ theta}} \\ {\ frac {Y} {\ theta}} \\ {\ frac {Z} {\ theta}} \ end {bmatrix}}}{\ displaystyle Ось (lnQ) = {\ begin {bmatrix} {\ frac {X} {\ theta}} \\ {\ frac {Y} {\ theta}} \\ {\ frac {Z} {\ theta}} \ end {bmatrix}}}

Преобразование в 1 норму

(Требуется / предлагается иллюстрация) Вращение на «90 градусов вокруг одной оси и на 90 градусов вокруг другой оси» можно назвать «180 градусов»; такое вращение выглядело бы как полный переворот плоскости, и это так, но для значений вектора с двумя нормами этот пример будет 2 {\ displaystyle {\ sqrt {2}}}{\ displaystyle {\ sqrt {2}}} off.

Q h = Q ∗ | | Q | | / | | Q | | 1 {\ displaystyle Q_ {h} = Q * || Q || / || Q || _ {1}}{\ displaystyle Q_ {h} = Q * || Q | | / || Q || _ {1}}

Математически значение 1-нормы никогда не используется; и векторы вращения точно такие же, как векторы скорости в 3-х измерениях, которые могут быть представлены как скорость ⋅ directionunitvector {\ displaystyle {speed} \ cdot {directionunitvector}}{\ displaystyle {speed} \ cdot {directionunitvector}} , например angle ⋅ axisofrotation {\ displaystyle {angle} \ cdot {axisofrotation}}{\ displaystyle {angle} \ cdot {axisofrotation}} .

Представление кватерниона

Q = [cos ⁡ θ 2 sin ⁡ θ 2 X | | Q | | sin ⁡ θ 2 Y | | Q | | sin ⁡ θ 2 Z | | Q | | ] {\ displaystyle Q = {\ begin {bmatrix} \ cos {\ frac {\ theta} {2}} \\\ sin {\ frac {\ theta} {2}} {{\ frac {X} {|} } | Q ||} \\\ sin {\ frac {\ theta} {2}} {{\ frac {Y} {|}} | Q ||} \\\ sin {\ frac {\ theta} {2 }} {{\ frac {Z} {|}} | Q ||} \ end {bmatrix}}}{\ displaystyle Q = {\ begin {bmatrix} \ cos {\ frac {\ theta} {2 }} \\\ sin {\ frac {\ theta} {2}} {{\ frac {X} {|}} | Q ||} \\\ sin {\ frac {\ theta} {2}} {{ \ frac {Y} {|}} | Q ||} \\\ sin {\ frac {\ theta} {2}} {{\ frac {Z} {|}} | Q ||} \ end {bmatrix} }}

Вычисление базовой матрицы

Это было построено путем вращения векторов (1,0,0), (0,1,0), (0,0,1) и приводящие константы.

Дан вход Q = [XYZ] {\ displaystyle {Q} = [{X} {Y} {Z}]}{\ displaystyle {Q} = [{X} {Y} {Z}]}

qr = cos ⁡ θ qi = sin ⁡ θ ⋅ X | | Q | | q j = sin ⁡ θ ⋅ Y | | Q | | q k = sin ⁡ θ ⋅ Z | | Q | | {\ displaystyle {\ begin {matrix} q_ {r} = \ cos \ theta \\ q_ {i} = \ sin \ theta \ cdot {\ frac {X} {|| Q ||}} \\ q_ {j } = \ sin \ theta \ cdot {\ frac {Y} {|| Q ||}} \\ q_ {k} = \ sin \ theta \ cdot {\ frac {Z} {|| Q ||}} \ end {matrix}}}{\ displaystyle {\ begin {matrix} q_ {r} = \ cos \ theta \\ q_ {i} = \ sin \ theta \ cdot {\ frac {X} {|| Q ||}} \\ q_ {j} = \ sin \ theta \ cdot {\ frac {Y} {|| Q ||}} \\ q_ {k} = \ sin \ theta \ cdot {\ frac {Z} {|| Q ||}} \ end {matrix}}}

которые используются для вычисления результирующей матрицы...

[1-2 qj 2-2 qk 2 2 (qiqj - qkqr) 2 (qiqk + qjqr) 2 (qiqj + qkqr) 1 - 2 ци 2 - 2 qk 2 2 (qjqk - qiqr) 2 (qiqk - qjqr) 2 (qjqk + qiqr) 1 - 2 qi 2 - 2 qj 2] {\ displaystyle {\ begin {bmatrix} 1-2q_ {j} ^ {2} -2q_ {k} ^ {2} 2 (q_ {i} q_ {j} -q_ {k} q_ {r}) 2 (q_ {i} q_ {k} + q_ {j } q_ {r}) \\ 2 (q_ {i} q_ {j} + q_ {k} q_ {r}) 1-2q_ {i} ^ {2} -2q_ {k} ^ {2} 2 (q_ {j} q_ {k} -q_ {i} q_ {r}) \\ 2 (q_ {i} q_ {k} -q_ {j} q_ {r}) 2 (q_ {j} q_ {k} + q_ {i} q_ {r}) 1-2q_ {i} ^ {2} -2q_ {j} ^ {2} \ end {bmatrix}}}{\ displaystyle {\ begin {bmatrix} 1-2q_ {j} ^ {2} -2q_ {k} ^ {2} 2 (q_ {i} q_ {j} -q_ {k} q_ {r}) 2 (q_ {i} q_ {k} + q_ {j} q_ {r}) \\ 2 (q_ {i } q_ {j} + q_ {k} q_ {r}) 1-2q_ {i} ^ {2} -2q_ {k} ^ {2} 2 (q_ {j} q_ {k} -q_ {i} q_ {r}) \\ 2 (q_ {i} q_ {k} -q_ {j} q_ {r}) 2 (q_ {j} q_ {k} + q_ {i} q_ {r}) 1-2q_ { i} ^ {2} -2q_ {j} ^ {2} \ end {bmatrix}}}

Расчет альтернативного базиса

В качестве альтернативы это может быть использовано

задано: A = [X, Y, Z] {\ displaystyle {A} = [X, Y, Z]}{\ displaystyle {A} = [X, Y, Z]}

преобразовать в ось угла θ = | | А | | {\ displaystyle \ theta = || A ||}{\ displaystyle \ theta = || A ||} и [x, y, z] {\ displaystyle [x, y, z]}[x, y, z] = A | | А | | {\ displaystyle {\ frac {A} {|| A ||}}}{\ displaystyle {\ frac {A} {|| A ||}}}

Вычислите некоторые частичные выражения: xy = xy (1 - cos ⁡ θ) wx = x sin ⁡ θ xx = xx (1 - cos ⁡ θ) yz = yz (1 - cos ⁡ θ) wy = y sin ⁡ θ yy = yy (1 - cos ⁡ θ) xz = xz (1 - cos ⁡ θ) wz = z sin ⁡ θ zz = zz (1 - соз ⁡ θ) {\ displaystyle {\ begin {matrix} x_ {y} = xy (1- \ cos \ theta) w_ {x} = x \ sin \ theta x_ {x} = xx (1- \ cos \ theta) \\ y_ {z} = yz (1- \ cos \ theta) w_ {y} = y \ sin \ theta y_ {y} = yy (1- \ cos \ theta) \\ x_ {z} = xz (1- \ cos \ theta) w_ {z} = z \ sin \ theta z_ {z} = zz (1- \ cos \ theta) \ end {matrix}}}{\ displaystyle {\ begin {matrix } x_ {y} = xy (1- \ cos \ theta) w_ {x} = x \ sin \ theta x_ {x} = xx (1- \ cos \ theta) \\ y_ {z} = yz (1- \ cos \ theta) w_ {y} = y \ sin \ theta y_ {y} = yy (1- \ cos \ theta) \\ x_ {z} = xz (1- \ cos \ theta) w_ {z} = z \ sin \ theta z_ {z} = zz (1- \ cos \ theta) \ end {matrix}}}

. Вычислить полученную матрицу: [соз ⁡ θ + xxxy + wzwy + xzwz + xy cos ⁡ θ + yyyz - wxxz - wywx + yz cos ⁡ θ + zz] {\ displaystyle {\ begin {bmatrix} \ cos \ theta + x_ {x} x_ {y} + w_ {z} w_ {y} + x_ {z} \\ w_ {z} + x_ {y} \ cos \ theta + y_ {y} y_ {z} -w_ {x} \\ x_ {z} -w_ {y} w_ {x} + y_ {z} \ cos \ theta + z_ {z} \ end {bmatrix}}}{\ displaystyle {\ begin {bmatrix} \ cos \ theta + x_ {x} x_ {y} + w_ {z} w_ {y} + x_ {z} \\ w_ {z} + x_ {y} \ cos \ theta + y_ {y} y_ {z} -w_ {x} \\ x_ {z} -w_ {y} w_ {x} + y_ {z} \ cos \ theta + z_ {z} \ end {bmatrix}}}

. Расширенный: [cos ⁡ θ + x 2 ( 1 - cos ⁡ θ) xy (1 - cos ⁡ θ) + z sin ⁡ θ y sin ⁡ θ + xz (1 - cos ⁡ θ) z sin ⁡ θ + xy (1 - cos ⁡ θ) cos ⁡ θ + y 2 (1 - cos ⁡ θ) yz (1 - cos ⁡ θ) - x sin ⁡ θ xz (1 - cos ⁡ θ) - y sin ⁡ θ x sin ⁡ θ + yz ( 1 - соз ⁡ θ) соз ⁡ θ + Z 2 (1 - соз ⁡ θ)] {\ displaystyle {\ begin {bmatrix} \ cos \ theta + x ^ {2} (1- \ cos \ theta) xy (1 - \ cos \ theta) + z \ sin \ theta y \ sin \ theta + xz (1- \ cos \ theta) \\ z \ sin \ theta + xy (1- \ cos \ theta) \ cos \ theta + y ^ {2} (1- \ cos \ theta) yz (1- \ cos \ theta) -x \ sin \ theta \\ xz (1- \ cos \ theta) -y \ sin \ theta x \ sin \ theta + yz (1- \ cos \ theta) \ cos \ theta + z ^ {2} (1- \ cos \ theta) \ end {bmatrix}}}{\ displaystyle {\ begin {bmatrix} \ cos \ theta + x ^ {2} (1- \ cos \ theta) xy (1- \ cos \ theta) + z \ sin \ theta y \ sin \ theta + xz (1- \ cos \ theta) \\ z \ sin \ theta + xy (1- \ cos \ theta) \ cos \ theta + y ^ { 2} (1- \ cos \ theta) yz (1- \ cos \ theta) -x \ sin \ theta \\ xz (1- \ cos \ theta) -y \ sin \ theta x \ sin \ theta + yz ( 1- \ cos \ theta) \ cos \ theta + z ^ {2} (1- \ cos \ theta) \ en d {bmatrix}}}

.

Вращение вектора

Это в основном преобразование в кватернион, а затем приложение. Умножение взято из этого блога.

Поверните этот вектор...

[v X v Y v Z] {\ displaystyle {\ begin {bmatrix} v_ {X} \\ v_ {Y} \\ v_ {Z} \\ \ end {bmatrix}}}{\ displaystyle {\ begin {bmatrix} v_ {X} \\ v_ {Y} \\ v_ {Z} \\\ end { bmatrix}}}

Вычислить sin () {\ displaystyle sin ()}{\ displaystyle sin ()} и cos () {\ displaystyle cos ()}{\ displaystyle cos ()} от общего угла поворота...

грех θ = грех (θ) {\ displaystyle sin {\ theta} = sin (\ theta)}{\ displaystyle sin {\ theta} = sin (\ theta)}
qw = cos (θ) {\ displaystyle qw = cos ( {\ theta})}{\ displaystyle qw = cos ({\ theta})}

Масштабировать нормальную ось вращения на sin θ {\ displaystyle sin \ theta}{\ displaystyle sin \ theta} ...

qx = q X ⋅ sin θ {\ displaystyle qx знак равно q_ {X} \ cdot sin \ theta}{\ displaystyle qx = q_ {X} \ cdot sin \ theta}
qy = q Y sin θ {\ displaystyle qy = q_ {Y} \ cdot sin \ theta}{\ displaystyle qy = q_ {Y} \ cdot sin \ theta}
qz = q Z ⋅ sin θ {\ displaystyle qz = q_ {Z} \ cdot sin \ theta}{\ displaystyle qz = q_ {Z} \ cdot sin \ theta}

Некоторые временные факторы....

tx = 2 (qy ⋅ v. z - qz ⋅ v. y) {\ displaystyle tx = 2 (qy \ cdot vz-qz \ cdot vy)}{\ displaystyle tx = 2 (qy \ cdot vz-qz \ cdot vy)}
ty = 2 (qz ⋅ v. x - qx ⋅ v. z) {\ displaystyle ty = 2 (qz \ cdot vx-qx \ cdot vz)}{\ displaystyle ty = 2 (qz \ cdot vx-qx \ cdot vz)}
tz = 2 (qx ⋅ v. Y - qy ⋅ v. X) {\ displaystyle tz = 2 (qx \ cdot vy-qy \ cdot vx)}{\ displaystyle tz = 2 (qx \ cdot vy-qy \ cdot vx)}

И fi конечный вектор, изогнутый этими углами, равен...

result = [vx + qw ⋅ tx + (qy ⋅ tz - ty ⋅ qz) vy + qw ⋅ ty + (qz ⋅ tx - tz ⋅ qx) vz + qw ⋅ tz + (qx ⋅ ty - tx ⋅ qy)] {\ displaystyle result = {\ begin {bmatrix} v_ {x} + qw \ cdot tx + (qy \ cdot tz-ty \ cdot qz) \\ v_ {y} + qw \ cdot ty + (qz \ cdot tx-tz \ cdot qx) \\ v_ {z} + qw \ cdot tz + (qx \ cdot ty-tx \ cdot qy) \ end {bmatrix}}}{\ displaystyle result = {\ begin {bmatrix} v_ { x} + qw \ cdot tx + (qy \ cdot tz-ty \ cdot qz) \\ v_ {y} + qw \ cdot ty + (qz \ cdot tx-tz \ cdot qx) \\ v_ {z} + qw \ cdot tz + (qx \ cdot ty-tx \ cdot qy) \ end {bmatrix}}}

.

Вращение Родригеса

Для заданного Q = [XYZ] {\ displaystyle {Q} = [{X} {Y} {Z}]}{\ displaystyle {Q} = [{X} {Y} {Z}]} и оси a = [XYZ] {\ displaystyle {a} = [{X} {Y} {Z}]}{\ displaystyle {a} = [{X} {Y} {Z}]} и угол γ {\ displaystyle \ gamma}\ gamma , чтобы повернуть поворот около.

Нормализованная ось вращения...

[a X a Y a Z] {\ displaystyle {\ begin {bmatrix} a_ {X} \\ a_ {Y} \\ a_ {Z} \ end {bmatrix}}}{\ displaystyle {\ begin {bmatrix} a_ {X} \\ a_ {Y} \\ a_ { Z} \ end {bmatrix}}}

Угол поворота

θ = | | Q | | 2 {\ displaystyle \ theta = {\ frac {|| Q ||} {2}}}{\ displaystyle \ theta = {\ frac {|| Q ||} {2}}}
cos ⁡ α 2 = cos θ ⋅ ​​cos γ 2 + sin θ ⋅ sin γ 2) ⋅ (X ⋅ baseupx + a Y ⋅ baseupy + a Z ⋅ baseupy) {\ displaystyle \ cos {\ frac {\ alpha} {2}} = cos \ theta \ cdot cos {\ frac {\ gamma} {2}} + sin \ theta \ cdot sin {\ frac {\ gamma} {2}}) \ cdot (a_ {X} \ cdot {base} _ {up_ {x}} + a_ {Y} \ cdot {base} _ {up_ {y}} + a_ {Z} \ cdot {base} _ {up_ {y}})}{\ displaystyle \ cos {\ frac {\ alpha} {2}} = cos \ theta \ cdot cos { \ frac {\ gamma} {2}} + sin \ theta \ cdot sin {\ frac {\ gamma} {2}}) \ cdot (a_ {X} \ cdot {base} _ {up_ {x}} + a_ {Y} \ cdot {base} _ {up_ {y}} + a_ {Z} \ cdot {base} _ {up_ {y}})}

А затем вычислить угол результата...

resultangle = 2 cos - 1 (cos α 2) {\ displaystyle result_ { angle} = 2cos ^ {- 1} (cos {\ frac {\ alpha} {2}})}{\ displaystyle result_ {angle} = 2cos ^ {- 1} (cos {\ frac {\ alpha} {2}})}

И ось результата...

C = [sin γ ⋅ cos θ ⋅ ​​a X + sin θ ⋅ cos γ ⋅ qnx + sin θ ⋅ sin γ ⋅ (a Y ⋅ qnz - a Z ⋅ qny) sin γ ⋅ cos θ ⋅ ​​a Y + sin θ ⋅ cos γ ⋅ qny + sin θ ⋅ sin γ ⋅ (a Z ⋅ qnx - a Икс ⋅ qnz) грех γ ⋅ соз θ ⋅ a Z + sin θ ⋅ соз γ ⋅ qnz + sin θ ⋅ sin γ ⋅ (a X ⋅ qny - a Y ⋅ qnx)] {\ displaystyle C = {\ begin {bmatrix} sin \ gamma \ cdot cos \ theta \ cdot a_ {X} + sin \ theta \ cdot c os \ gamma \ cdot q_ {nx} + sin \ theta \ cdot sin \ gamma \ cdot (a_ {Y} \ cdot q_ {nz} -a_ {Z} \ cdot q_ {ny}) \\ sin \ gamma \ cdot cos \ theta \ cdot a_ {Y} + sin \ theta \ cdot cos \ gamma \ cdot q_ {ny} + sin \ theta \ cdot sin \ gamma \ cdot (a_ {Z} \ cdot q_ {nx} -a_ {X } \ cdot q_ {nz}) \\ sin \ gamma \ cdot cos \ theta \ cdot a_ {Z} + sin \ theta \ cdot cos \ gamma \ cdot q_ {nz} + sin \ theta \ cdot sin \ gamma \ cdot (a_ {X} \ cdot q_ {ny} -a_ {Y} \ cdot q_ {nx}) \ end {bmatrix}}}{\ displaystyle C = {\ begin {bmatrix} sin \ gamma \ cdot cos \ theta \ cdot a_ {X} + sin \ theta \ cdot cos \ gamma \ cdot q_ {nx} + sin \ theta \ cdot sin \ gamma \ cdot (a_ {Y} \ cdot q_ {nz} -a_ {Z} \ cdot q_ {ny}) \\ sin \ gamma \ cdot cos \ the ta \ cdot a_ {Y} + sin \ theta \ cdot cos \ gamma \ cdot q_ {ny} + sin \ theta \ cdot sin \ gamma \ cdot (a_ {Z} \ cdot q_ {nx} -a_ {X} \ cdot q_ {nz}) \\ sin \ gamma \ cdot cos \ theta \ cdot a_ {Z} + sin \ theta \ cdot cos \ gamma \ cdot q_ {nz} + sin \ theta \ cdot sin \ gamma \ cdot (a_ {X} \ cdot q_ {ny} -a_ {Y} \ cdot q_ {nx}) \ end {bmatrix}}}

Используйте sin α {\ displaystyle sin \ alpha}{\ displaystyle sin \ alpha} для нормализации перекрестного произведения...

sin α = sin (resultangle / 2) {\ displaystyle sin \ alpha = sin (result_ {angle} / 2)}{\ displaystyle sin \ alpha = sin (result_ {angle} / 2) }

Получить общий угол для масштабирования результата..

C norm = sin α ⋅ (| С X s i n α | + | C Y s i n α | + | C Z s i n α |) {\ displaystyle C_ {norm} = sin \ alpha \ cdot (| {\ frac {C_ {X}} {sin \ alpha}} | + | {\ frac {C_ {Y}} {sin \ alpha}} | + | {\ frac {C_ {Z}} {sin \ alpha}} |)}{\ displaystyle C_ {norm} = грех \ альфа \ cdot (| {\ frac {C_ {X}} {sin \ alpha}} | + | {\ frac {C_ {Y}} {sin \ alpha}} | + | {\ гидроразрыва {C_ {Z}} {грех \ альфа}} |)}

И окончательный результат угол-угол-угол...

результат = [C x / C norm ⋅ resultangle C y / C norm ⋅ resultangle C z / C norm ⋅ resultangle] {\ displaystyle {\ begin {matrix} result = {\ begin {bmatrix} Cx / C_ {norm} \ cdot result_ {angle} \\ Cy / C_ {norm} \ cdot result_ {угол} \\ Cz / C_ {norm} \ cdot result_ {angle} \ end {bmatrix}} \ end {matrix}}}{\ display style {\ begin {matrix} result = {\ begin {bmatrix} Cx / C_ {norm} \ cdot result_ {angle} \\ Cy / C_ {norm} \ cdot result_ {angle} \\ Cz / C_ {norm} \ cdot result_ {угол} \ end {bmatrix}} \ end {matrix}}}

Преобразование из базовой матрицы

Вычислить определитель матрица...

det = (правый базис X + базис Y + базис вперед Z) - 1 2 {\ displaystyle det = {\ frac {(базис_ {right_ {X}} + базис_ {вверх_ {Y}} + базис_ {forward_ {Z}}) - 1} {2}}}{\ displaystyle det = {\ frac {(базис_ {right_ {X}} + базис_ {вверх_ {Y}} + базис_ {вперед_ {Z}}) - 1} {2}}}

Преобразовать в угол поворота...

θ = arccos (det) ∗ 2; {\ Displaystyle \ theta = arccos (det) * 2;}{\ displaystyle \ theta = arccos (det) * 2;}
Y Z знак равно б а s я с у п Z - б а с я с ф о р ш а р д Y; {\ displaystyle yz = base_ {up_ {Z}} - base_ {forward_ {Y}};}{\ displaystyle yz = base_ {up_ {Z}} - base_ {forward_ {Y}};}
x z = b a s i s f o r w a r d X - b a s i s r i g h t Z; {\ displaystyle xz = base_ {forward_ {X}} - base_ {right_ {Z}};}{\ displaystyle xz = base_ {forward_ {X}} - base_ {right_ {Z}};}
x y = b a s i s r i g h t Y - b a s i s u p X; {\ displaystyle xy = base_ {right_ {Y}} - base_ {up_ {X}};}{\ displaystyle xy = base_ {right_ {Y}} - base_ {up_ {X}};}

вычислить нормальный коэффициент...

n или r m a l = 1 / (y z 2 + x z 2 + x y 2); {\ displaystyle normal = 1 / {\ sqrt {(}} yz ^ {2} + xz ^ {2} + xy ^ {2});}{\ displaystyle normal = 1 / {\ sqrt {(}} yz ^ {2} + xz ^ {2} + xy ^ {2});}
n = [yz ⋅ normalxz ⋅ normalxy ⋅ normal] {\ displaystyle n = {\ begin {bmatrix} yz \ cdot normal \\ xz \ cdot normal \\ xy \ cdot normal \ end {bmatrix}}}{\ displaystyle n = {\ begin {bmatrix} yz \ cdot normal \\ xz \ cdot normal \\ xy \ cdot normal \ end {bmatrix}}}

результирующий угол-угол-угол:

n ⋅ θ { \ displaystyle {n} \ cdot \ theta}{\ displaystyle {n} \ cdot \ theta}

Преобразование из вектора нормали (Y)

Представление нормали как вращения, предполагается, что вектор (0, 1, 0) { \ displaystyle (0,1,0)}(0,1,0) "вверх". Если какая-то другая ось считается основной, координаты можно просто поменять местами.

Это предполагает нормированный входной вектор в направлении нормали

N = [normal X normal Y normal Z] {\ displaystyle N = {\ begin {bmatrix} normal_ {X} \\ normal_ { Y} \\ normal_ {Z} \ end {bmatrix}}}{\ displaystyle N = {\ begin { bmatrix} normal_ {X} \\ normal_ {Y} \\ normal_ {Z} \ end {bmatrix}}}

Угол - это просто сумма координат x / z (или y, x, если Z 'вверх', или y, z, если X ' вверх ')...

угол = | N x | + | N z | {\ displaystyle angle = | N_ {x} | + | N_ {z} |}{\ displaystyle angle = | N_ {x} | + | N_ {z} |}

если угол равен 0, задание выполнено, результат с (0, 0, 0) {\ displaystyle (0, 0,0)}(0,0,0)

r = 1 / (угол) {\ displaystyle r = 1 / (angle)}{\ displaystyle r = 1 / (angle)}

Некоторые временные значения; эти значения являются лишь частичными, указанными позже...

t = [N x ⋅ r N y N z ⋅ r] {\ displaystyle t = {\ begin {bmatrix} N_ {x} \ cdot r \\ N_ {y } \\ N_ {z} \ cdot r \ end {bmatrix}}}{\ displaystyle t = {\ begin {bmatrix} N_ {x} \ cdot r \\ N_ {y} \\ N_ {z} \ cdot r \ end {bmatrix}}}

Использовать спроецированную нормаль на оси Y в качестве угла поворота...

targetangle = cos - 1 (t Y) {\ displaystyle target_ {угол} = cos ^ {- 1} (t_ {Y})}{\ displaystyle target_ {angle} = cos ^ {- 1} (t_ {Y})}
result = [t Z ⋅ targetangle 0 - t X ⋅ targetangle] {\ displaystyle result = {\ begin {bmatrix} t_ {Z } \ cdot target_ {angle} \\ 0 \\ - t_ {X} \ cdot target_ {angle} \ end {bmatrix}}}{\ displaystyle result = {\ begin {bmatrix} t_ {Z } \ cdot target_ {угол} \\ 0 \\ - t_ {X} \ cdot target_ {angle} \ end {bmatrix}}}

Выровнять по нормали с использованием базиса

Тангенс и двойное касание по умолчанию вращений, которые имеют только свой нормальный набор, приводят к неправильным касательным и двойным касательным. В качестве альтернативы можно построить базовую матрицу и преобразовать ее из базисной матрицы, используя вышеупомянутый метод. Вычислите нормаль для вышеуказанного и матрицу для преобразования...

normaltwist = (t Z 2 + t X 2) {\ displaystyle normal_ {twist} = {{\ sqrt {(}} t_ {Z} ^ {2} + t_ {X} ^ {2})}}{\ displaystyle normal_ {twist} = {{\ sqrt {(}} t_ {Z} ^ { 2} + t_ {X} ^ {2})}}
[(N y ⋅ - t X normaltwist) N xt Z normaltwist (N z ⋅ t Z normaltwist) - (N x ⋅ - t X нормальный поворот) N y 0 (- (N y ⋅ t Z normaltwist) N z - t X normaltwist] {\ displaystyle {\ begin {bmatrix} (N_ {y} \ cdot {\ frac {-t_ {X}}) {normal_ {twist }}}) N_ {x} {\ frac {t_ {Z}} {normal_ {twist}}} \\ (N_ {z} \ cdot {\ frac {t_ {Z}} {normal_ {twist}}})) - (N_ {x} \ cdot {\ frac {-t_ {X}} {normal_ {twist}}}) N_ {y} 0 \\ (- (N_ {y} \ cdot {\ frac {t_ {Z }} {normal_ {twist}}}) N_ {z} {\ frac {-t_ {X}} {normal_ {twist}}} \ end {bmatrix}}}{\ displaystyle {\ begin {bmatrix} (N_ {y} \ cdot {\ frac {-t_ {X}} {normal_ {twist }}}) N_ {x} {\ frac {t_ {Z}} {normal_ {twist}}} \\ (N_ {z} \ cdot {\ frac {t_ {Z}} {normal_ {twist}}}) - (N_ {x} \ cdot {\ frac {-t_ {X}} { normal_ {twist}}}) N_ {y} 0 \\ (- (N_ {y} \ cdot {\ frac {t_ {Z}} {normal_ {twist}}}) N_ {z} {\ frac {- t_ {X}} {normal_ {twist}}} \ end {bmatrix}}}

И затем используйте основу для регистрации кватерниона преобразование...

Прямое выравнивание по нормали

Или Это прямое вычисление для получения результата с кватернионом журнала; вычислите приведенный выше вектор результатов, а затем...

t X n = t X ⋅ normaltwistt Z n = t Z ⋅ norma л т ш и с т с = М а т ч. s i n (t a r g e t a n g l e) c = 1 - M a t h. соз (целевой угол) {\ displaystyle {\ begin {matrix} t_ {X_ {n}} = t_ {X} \ cdot normal_ {twist} \\ t_ {Z_ {n}} = t_ {Z} \ cdot normal_ {twist } \\ s = Math.sin (target_ {angle}) \\ c = 1-Math.cos (target_ {angle}) \ end {matrix}}}{\ displaystyle {\ begin {matrix} t_ {X_ {n}} = t_ {X} \ cdot normal_ {twist} \\ t_ {Z_ {n}} = t_ {Z} \ cdot normal_ {twist} \\ s = Math.sin (target_ {angle}) \\ c = 1-Math.cos (target_ {angle}) \ end {matrix}}}

Это угол

angle = acos ( (t Y + 1) ∗ (1 - t X n) / 2 - 1); {\ displaystyle angle = acos ((t_ {Y} +1) * (1-t_ {X_ {n}}) / 2-1);}{\ displaystyle angl е = acos ((t_ {Y} +1) * (1-t_ {X_ {n}}) / 2-1);}

Эти частичные продукты используются ниже...

yz = s ⋅ n X xz = (2 - c ⋅ (n X 2 + n Z 2)) ⋅ t Z nxy = s ⋅ n X ∗ t Z n + s ⋅ n Z ⋅ (1 - t X n) {\ displaystyle {\ begin {matrix} yz = s \ cdot n_ {X} \\ xz = (2-c \ cdot (n_ {X} ^ {2} + n_ {Z} ^ {2})) \ cdot t_ { Z_ {n}} \\ xy = s \ cdot n_ {X} * t_ {Z_ {n}} + s \ cdot n_ {Z} \ cdot (1-t_ {X_ {n}}) \ end {matrix} }}{\ displaystyle {\ begin {matrix} yz = s \ cdot n_ {X} \\ xz = (2-c \ cdot (n_ {X} ^ {2} + n_ {Z} ^ {2})) \ cdot t_ {Z_ {n}} \\ xy = s \ cdot n_ {X} * t_ {Z_ {n}} + s \ cdot n_ {Z} \ cdot (1-t_ {X_ {n}}) \ end {matrix}}}

Вычислить нормализованный вектор вращения (ось вращения)...

n = [yz (yz 2 + xz 2 + xy 2) xz (yz 2 + xz 2 + xy 2) xy (yz 2 + xz 2 + xy 2)] {\ displaystyle n = {\ begin {bmatrix} {\ frac {yz} {{\ sqrt {(}} yz ^ {2} + xz ^ {2} + xy ^ {2})}} \\ {\ frac {xz} {{\ sqrt {(}} yz ^ {2} + xz ^ {2} + xy ^ {2})}} \\ {\ frac {xy} {{\ sqrt {(}} yz ^ {2} + xz ^ {2} + xy ^ {2})}} \ end {bmatrix}}}{\ displaystyle n = {\ begin {bmatrix} {\ frac {yz} {{\ sqrt { (}} yz ^ {2} + xz ^ {2} + xy ^ {2})}} \\ {\ frac {xz} {{\ sqrt {(}} yz ^ {2} + xz ^ {2} + xy ^ {2})}} \\ {\ frac {xy} {{\ s qrt {(}} yz ^ {2} + xz ^ {2} + xy ^ {2})}} \ end {bmatrix}}}

и, наконец, вычислить полученный кватерион журнала.

е я N а л р е s U L T знак равно a N г л е ⋅ N {\ Displaystyle final_ {результат} = {угол} \ cdot {n}}{\ displaystyle final_ {result} = {angle} \ cdot {n}}

Преобразование из угла оси

Предполагается, что входная ось a = [XYZ] {\ displaystyle {a} = [{X} {Y} {Z}]}{\ displaystyle {a} = [{X} {Y} {Z}]} нормализовано. Если вращение равно 0, результат будет с (0, 0, 0) {\ displaystyle (0,0,0)}(0,0,0)

θ = angle {\ displaystyle \ theta = angle}{\ displaystyle \ theta = angle}
result = θ ∗. a {\ displaystyle result = \ theta * {a}}{ \ displaystyle result = \ theta * {a}}
См. также
Ссылки
Дополнительная литература
Внешние ссылки
На Wikimedia Commons есть материалы, связанные с Трехмерное вращение.
Последняя правка сделана 2021-06-04 10:56:35
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте