Ликбез по кватернионам, часть 2
nabbla1 — 13.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) |
и мы обнаруживаем, что мнимые единицы не коммутируют. Точнее, они антикоммутируют, т.е от перемены мест множителей произведение меняет знак. Ну а кватернионы в общем случае просто не коммутируют, и это совершенно ожидаемое явление, ведь повороты в пространстве тоже, вообще говоря, не коммутируют!
В книгах любят приводить поворот книги в двух направлениях, но опыт автора показывает – повторить это вживую очень тяжело, моментально запутаешься, по какой оси делался каждый поворот. Лучше демонстрировать повороты на модельке самолёта, у него нос и хвост, верх и низ, лево и право куда лучше выражены, чем у книги, и все направления имеют свои названия!
Начнем с абстрактного самолёта, на которого мы смотрим сзади:
Пусть он повернется на 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 находится справа, поэтому логичным кажется умножать числитель и знаменатель именно справа. Проделаем это:
Тем не менее, такая запись тоже встречается довольно редко, а в большинстве случаев мы находим кватернион, обратный данному:
и уже его будем умножать либо слева, либо справа – такая запись получается наиболее строгой. Заметим, кстати, что для единичных кватернионов
можно провести аналогию с ортогональными матрицами (матрицы поворота - их частный случай), для которых
Итак, мы узнали основные формы записи кватернионов, арифметические действия над ними, сопряжение и взятие модуля. В сущности, это всё, что должен уметь делать вычислитель в системе ориентации, никакой тригонометрии, никакого матана, бери и считай!
Осталось только понять, как кватернионы связаны с поворотами и как именно с их помощью можно крутить векторы. Об этом в третьей части.
|
</> |