Наверное, самая простая часть, самая стандартная (сложно это всё изложить как-то иначе, да и не нужно) и самая важная.
Основные операции
Пора поиграться с надписью на мосту. Выпишем эти соотношения отдельными пунктами:
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)=
Такая форма записи вполне подходит для компьютера - мы можем легко сосчитать, что для умножения двух кватернионов требуется 16 умножений и 12 сложений/вычитаний. Громоздко, однако перемножение двух матриц 3х3 ещё хуже - такая операция требует 27 умножений и 18 сложений. Именно эта причина, по мнению многих, предопределила использование кватернионов в космических аппаратах - интегрирование угловых скоростей через кватернионы требует меньше вычислительных затрат. Да, и это тоже (хотя, как мы увидим позже, применить поворот к вектору с помощью кватернионов требует больше труда, чем с помощью матрицы), но подозреваю, что это отнюдь не самая важная из причин.
Для человека же понять, что происходит в формуле (2.13) - не так-то легко. Попробуем сгруппировать отдельные компоненты, как это показано цветом.
И введём новые обозначения: действительную часть (нулевую компоненту) кватерниона назовём скалярной частью, а три компоненты мнимой части - векторной. То есть,
В таком случае, слагаемое, обозначенное красным в (2.13) - это произведение двух скалярных частей. Слагаемые, обозначенные голубым - вектор b, помноженный на скаляр a. Слагаемые, обозначенные фиолетовым - вектор a, помноженный на скаляр b. Слагаемые, обозначенные зелёным - это скалярное произведение векторов a,b, взятое со знаком «минус». И наконец, 6 слагаемых, обозначенных черным - это векторное произведение векторов a,b. Итак, в новых обозначениях произведение кватернионов запишется следующим образом:
Такая форма записи хороша ещё и тем, что мы захотим применять кватернионы для поворота векторов в пространстве, так вот, вектор и будет частным случаем кватерниона, с нулевой (а вообще говоря, произвольной) скалярной частью.
Сопряженный кватернион
По аналогии с комплексными числами, вводим понятие сопряженного кватерниона, у которого действительная (скалярная) часть остаётся такой, как была, а мнимая (векторная) меняет свой знак:
Важным для нас окажется следующее равенство:
то есть, сопряжение от произведения кватернионов равно произведению сопряженных кватернионов, выполненному в обратном порядке. Аналогичными свойствами обладают операции транспонирования матрицы, а также гильбертова сопряжения. Найдём, чему равно произведение кватерниона на сопряженный к нему:
Итак, произведение кватерниона на сопряженный к нему равно сумме квадратов всех компонентов и не зависит от порядка умножения, эту величину называют квадратом модуля, а сам модуль определяется как:
При умножении кватернионов выполняется равенство:
К примеру, если перемножать единичные кватернионы (т. е с модулем единица), получится также единичный кватернион. Данное свойство встречается столь же редко в системах гиперкомплексных чисел, как и деление, и это не случайно. По сути, из (2.19) мы видим, что при умножении ненулевых кватернионов результат никогда не обратится в ноль.
Деление кватернионов Как мы видели раньше, наличие операции деления - принципиально важно для представления поворотов. Тем не менее, саму по себе запись деления очень редко можно встретить при работе с кватернионами, и на это есть основание. Запишем деление как дробь с горизонтальной чертой:
По аналогии с комплексными числами, помножим числитель и знаменатель на Μ. И тут-то возникает проблема: должны ли мы умножать их слева или справа? Как мы знаем, умножение кватернионов вообще говоря некоммутативно, поэтому результаты получатся разными. При записи
по крайней мере M находится справа, поэтому логичным кажется умножать числитель и знаменатель именно справа. Проделаем это:
Тем не менее, такая запись тоже встречается довольно редко, а в большинстве случаев мы находим кватернион, обратный данному:
и уже его будем умножать либо слева, либо справа - такая запись получается наиболее строгой. Заметим, кстати, что для единичных кватернионов
можно провести аналогию с ортогональными матрицами (матрицы поворота - их частный случай), для которых
Итак, мы узнали основные формы записи кватернионов, арифметические действия над ними, сопряжение и взятие модуля. В сущности, это всё, что должен уметь делать вычислитель в системе ориентации, никакой тригонометрии, никакого матана, бери и считай! Осталось только понять, как кватернионы связаны с поворотами и как именно с их помощью можно крутить векторы. Об этом в третьей части.