Ликбез по кватернионам, часть 2

топ 100 блогов nabbla113.07.2017 Наверное, самая простая часть, самая стандартная (сложно это всё изложить как-то иначе, да и не нужно) и самая важная.

Основные операции

Пора поиграться с надписью на мосту. Выпишем эти соотношения отдельными пунктами:
i2 = -1 (2.1)
j2 = -1 (2.2)
k2 = -1 (2.3)
ijk = -1 (2.4)



Помножим обе части (2.4) слева на i:

i*ijk = i2 * jk = - jk= -i,
jk = i
(2.5)


помножим обе части (2.4) на k справа:

ijk*k = ij * k2 = -ij = -k,
ij = k
(2.6)


помножим обе части (2.5) слева на j:

j2k = -k = ji,
ji = -k
(2.7)


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

Начнем с абстрактного самолёта, на которого мы смотрим сзади:
Ликбез по кватернионам, часть 2 PlaneRear.png

Пусть он повернется на 90 градусов по крену, по часовой стрелке:
Ликбез по кватернионам, часть 2 PlaneRear90CW.png

А теперь - на 90 градусов по курсу, направо (направо для пилота, т.е по направлению к правому крылу!):
Ликбез по кватернионам, часть 2 PlaneFromLeft90CW.png

Итог двух поворотов в порядке "сначала крен, потом курс" - самолёт летит (или скорее падает) вертикально вниз. Пожалуйста, не повторяйте это дома!

Попробуем поменять повороты местами. Начнем с курса - самолёт повернул направо:
Ликбез по кватернионам, часть 2 PlaneFromLeft.png

А теперь поворот по крену:
Ликбез по кватернионам, часть 2 PlaneTop.png

Итог: самолёт летит горизонтально "направо", правым крылом книзу - ну совсем другая картина!

Здесь мы выполняли повороты в подвижной, или связанной системе координат, т.е вокруг осей, которые "прикреплены" к объекту, в нашем случае - курс, крен и тангаж.

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

Если бы умножение кватернионов было коммутативным, они были бы абсолютно непригодны для представления поворотов в пространстве!
Но продолжим выводить соотношения.
Помножим обе части (2.6) справа на j:

ij2 = -i = kj,
kj = -i
(2.8)


Помножим обе части (2.7) справа на i:

ji2 = -j = -ki,
ki = j
(2.9)


И последнее соотношение: помножим обе части (2.6) слева на i:

i2j= -j = ik,
ik = -j
(2.10)

Подытожим:

i2 = -1 ij = k ik = -j
ji = -k j2 = -1 jk = i
ki = j kj = -i k2 = -1


Эти соотношения довольно легко запомнить. Когда мы умножаем две различные мнимые единицы, получаем оставшуюся, причем со знаком “+”, если мы называем их по порядку (i->j->k->i) и со знаком “-“, если с пропуском.

Обозначение кватернионов
Принято присваивать кватернионам большие греческие буквы, начиная обычно с Λ, а индексы начинать с нуля:
Λ = a0+a1i+a2j+a3k,
Μ = b0+b1i+b2j+b3k

Сложение кватернионов
Ничего неожиданного: мы просто складываем их почленно:
Λ+Μ = (a0+b0)+(a1+b1)i+(a2+b2 )j+(a3+b3)k
(2.11)


Можно их и вычитать:
Λ-Μ = (a0-b0)+ (a1-b1)i+(a2-b2 )j+(a3-b3)k
(2.12)


Умножение кватернионов
Мы раскрываем скобки, после чего применяем соотношения (2.1)-(2.10):
ΛΜ = (a0+a1i+a2j+a3k)(b0+b1 i+b2 j+b3 k)=

=a0b0+a0b1i+a0b2j+a0 b3k+
+a1b0i-a1b1+a1b2k-a1 b3j+
+a2b0j-a2b1k-a2b2+a2 b3i+
+a3b0k+a3b1j-a3b2i-a3b3
(2.13)


Такая форма записи вполне подходит для компьютера – мы можем легко сосчитать, что для умножения двух кватернионов требуется 16 умножений и 12 сложений/вычитаний. Громоздко, однако перемножение двух матриц 3х3 ещё хуже – такая операция требует 27 умножений и 18 сложений. Именно эта причина, по мнению многих, предопределила использование кватернионов в космических аппаратах – интегрирование угловых скоростей через кватернионы требует меньше вычислительных затрат. Да, и это тоже (хотя, как мы увидим позже, применить поворот к вектору с помощью кватернионов требует больше труда, чем с помощью матрицы), но подозреваю, что это отнюдь не самая важная из причин.

Для человека же понять, что происходит в формуле (2.13) – не так-то легко. Попробуем сгруппировать отдельные компоненты, как это показано цветом.

И введём новые обозначения: действительную часть (нулевую компоненту) кватерниона назовём скалярной частью, а три компоненты мнимой части – векторной. То есть,
Ликбез по кватернионам, часть 2 vector_notation.png

В таком случае, слагаемое, обозначенное красным в (2.13) – это произведение двух скалярных частей.
Слагаемые, обозначенные голубым – вектор b, помноженный на скаляр a.
Слагаемые, обозначенные фиолетовым – вектор a, помноженный на скаляр b.
Слагаемые, обозначенные зелёным – это скалярное произведение векторов a,b, взятое со знаком «минус».
И наконец, 6 слагаемых, обозначенных черным – это векторное произведение векторов a,b.
Итак, в новых обозначениях произведение кватернионов запишется следующим образом:

Ликбез по кватернионам, часть 2 multiply_in_vector.png

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

Сопряженный кватернион

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

Ликбез по кватернионам, часть 2 conj.png

Важным для нас окажется следующее равенство:

Ликбез по кватернионам, часть 2 conj_eq.png

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

Ликбез по кватернионам, часть 2 moduleSquared.png

Итак, произведение кватерниона на сопряженный к нему равно сумме квадратов всех компонентов и не зависит от порядка умножения, эту величину называют квадратом модуля, а сам модуль определяется как:

Ликбез по кватернионам, часть 2 module.png

При умножении кватернионов выполняется равенство:
Ликбез по кватернионам, часть 2 module_eq.png

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

Деление кватернионов
Как мы видели раньше, наличие операции деления – принципиально важно для представления поворотов. Тем не менее, саму по себе запись деления очень редко можно встретить при работе с кватернионами, и на это есть основание.
Запишем деление как дробь с горизонтальной чертой:

Ликбез по кватернионам, часть 2 quatDivide1.png

По аналогии с комплексными числами, помножим числитель и знаменатель на Μ. И тут-то возникает проблема: должны ли мы умножать их слева или справа? Как мы знаем, умножение кватернионов вообще говоря некоммутативно, поэтому результаты получатся разными.
При записи

Ликбез по кватернионам, часть 2 quatDivide2.png

по крайней мере M находится справа, поэтому логичным кажется умножать числитель и знаменатель именно справа. Проделаем это:

Ликбез по кватернионам, часть 2 quatDivideFormula.png

Тем не менее, такая запись тоже встречается довольно редко, а в большинстве случаев мы находим кватернион, обратный данному:
Ликбез по кватернионам, часть 2 quatInversion.png

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

Ликбез по кватернионам, часть 2 inversionEq.png

можно провести аналогию с ортогональными матрицами (матрицы поворота - их частный случай), для которых

Ликбез по кватернионам, часть 2 matrixInv.png

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

Оставить комментарий

Архив записей в блогах:
Когда мы вспоминаем о Японии, то в памяти всплывает в памяти образ утонченной гейши –  еще бы, начитались мы романтических рассказов, в которых героини защищены своим двойственным, странным общественным положением. При этом забывается, что гейши — далеко не все женщины, чье ...
В Бомбее - 100 тысяч зороастрийцев. Так получается, что бомбейская община - самая правильная: в Иране - не разгуляешься; прозелитизм не признается никакими общинами, кроме иранской, но в Иране за него - смертная казнь. Всякая евро-американская ...
И почему системные антисоветчики типа Фрицморгена крайне вредны? По той простой причине, что постоянное шельмование советского периода истории и строя банально разрушает единство российского общества и сложившийся консенсус. Это первая причина. Вторая - это крайне негативные последствия ...
Интересно: Черчилль действительно много пил? Или это легенда типа тех, что про себя создают некоторые любители секса? Если же правда, то получается, что во главе правительства Англии был пьяница, а, может, даже и ...
Я удивлен, что роман "Червь" так долго оставался незамеченным для меня. Судя по роению в комментариях (это позитивная аналогия с Шелкопрядом), книга очень известная. А узнал я о книге только на Пикабу в каком-то комментарии к какому-то посту, о котором уже не упомнить. А ведь "Червь" ...