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

Jul 13, 2017 21:51

Оглавление "Ликбеза по кватернионам":
[Spoiler (click to open)]
Часть 1 - история вопроса
Часть 2 - основные операции
Часть 3 - запись вращения через кватернионы
Часть 4 - кватернионы и спиноры; порядок перемножения
Часть 5 - практическая реализация поворота
Часть 5 1/2 - введение метрики, "расстояния" между поворотами
часть 5 5/8 - метрика ненормированных кватернионов
часть 5 11/16 - красивая псевдометрика произвольных кватернионов
Часть 5 3/4 - исследуем "пространство поворотов"
Часть 5 7/8 - почти изотропный ёжик
Часть 6 - поворот по кратчайшему пути
Часть 6 1/4 - кратчайший поворот в общем случае
Часть 6 2/4 - поворот, совмещающий два направления
Часть 6 3/4 - кватернион из синуса и косинуса угла
Часть 6 7/8 - "уполовинивание угла" на плоскости
Часть 7 - интегрирование угловых скоростей, углы Эйлера-Крылова
Часть 8 - интегрирование угловых скоростей, матрицы поворота
Часть 8 1/2 - ортонормирование матрицы и уравнения Пуассона
Часть 9 - интегрирование угловых скоростей с помощью кватернионов
Часть 10 - интегрирование угловых скоростей, методы 2-го порядка
Часть 10 1/2 - интегрирование с поддержанием нормы
Часть 11 - интегрирование угловых скоростей, методы высших порядков (в разработке)
Часть 12 - навигационная задача
Часть 13 - Дэвенпорт берёт след!
Часть 14 - линейный метод Мортари-Маркли
Часть 15 - среднее от двух кватернионов
Часть 15 1/2 - проверка и усреднение кватернионов
Часть 16 - разложение кватерниона на повороты
Часть 17 - лидарная задача
Задачка к части 17
Дэвенпорт VS Мортари-Маркли
Мортари-Маркли берут реванш!
Дэвенпорт VS Мортари-Маркли, раунд 3


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

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

Пора поиграться с надписью на мосту. Выпишем эти соотношения отдельными пунктами:

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)

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

Начнем с абстрактного самолёта, на которого мы смотрим сзади:


Пусть он повернется на 90 градусов по крену, по часовой стрелке:


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


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

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


А теперь поворот по крену:


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

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

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

Если бы умножение кватернионов было коммутативным, они были бы абсолютно непригодны для представления поворотов в пространстве!
Но продолжим выводить соотношения.
Помножим обе части (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.13) - это произведение двух скалярных частей.
Слагаемые, обозначенные голубым - вектор b, помноженный на скаляр a.
Слагаемые, обозначенные фиолетовым - вектор a, помноженный на скаляр b.
Слагаемые, обозначенные зелёным - это скалярное произведение векторов a,b, взятое со знаком «минус».
И наконец, 6 слагаемых, обозначенных черным - это векторное произведение векторов a,b.
Итак, в новых обозначениях произведение кватернионов запишется следующим образом:



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

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

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



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



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



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



При умножении кватернионов выполняется равенство:


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

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



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



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



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


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



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



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

кватернионы-это просто (том 1), математика, работа

Previous post Next post
Up