Всем привет! Как вы уже, наверно, знаете (если не знаете — то советую узнать), в двумерной геометрии весьма удобно использовать комплексные числа для задания точек и вращений. Сейчас я хочу рассказать вам о похожей конструкции, которая позволяет эффективно работать с трёхмерным пространством. Базовые познания в аналитической геометрии желательны.
Итак, кватернион — это гиперкомплексное число, которое может быть представлено в виде , где
— действительные числа, а
— мнимые единицы. На кватернионах может быть введена операция умножения, которая задана тождеством
. Из этого тождества может быть выведена вся таблица умножения кватернионных единиц:
Отметим, что заданное таким образом кватернионное умножение обладает свойствами ассоциативности и дистрибутивности относительно сложения, в чём при желании можно убедиться, но не является коммутативным.
Четвёрку можно рассматривать как ортонормированный базис в четырёхмерном линейном пространстве, а кватернионы представлять в виде
, где
— вектор трёхмерного линейного пространства с базисом
. Компоненты
и
называются соответственно скалярной и векторной составляющими кватерниона. Пусть у нас есть кватернионы
и
. Тогда их произведение можно посчитать как
. Рассмотрим подробнее умножение двух чисто векторных кватернионов.
(x1i + y1j + z1k)(x2i + y2j + z2k) = - (x1x2 + y1y2 + z1z2) + i(y1z2 - z1y2) + j(z1x2 - x1z2) + k(x1y2 - y1x2).
Заметим, что это можно кратко переписать как , где
и
— соответственно векторное и скалярное произведения векторов
и
. Таким образом, окончательно получаем формулу для произведения кватернионов
.
Наконец, обратим внимание, что кватернион может также быть задан в виде
, где
— комплексные числа. В таком случае произведение кватернионов
и
может быть записано как
, где
— сопряжённое к
комплексное число.
Покажем, что любой ненулевой кватернион обратим. Действительно, по аналогии с комплексными числами можно рассмотреть для кватерниона кватернион
, который назовём сопряжённым к нему. Из выведенной выше формулы можно видеть, что
. Таким образом, мы можем ввести для кватернионов норму
и обратный элемент
. Обратим внимание на то, что
. Действительно, из формулы умножения прямо следует
. Отсюда сразу следует, что
и
.
Здесь и далее будем считать векторы кватернионами с нулевой скалярной частью. Введём операцию сопряжения вектора a кватернионом g, результатом которой является вектор[1] . Это равенство эквивалентно тому, что
. Пусть
, тогда, расписывая, получаем
. Рассматривая отдельно скалярные и векторные части, получаем:
![](https://espresso.codeforces.com/8999f54b233ad133b11d2c8a339d9fb0020f80dc.png)
Обратим внимание, что в силу мультипликативности нормы кватернионов, нормы векторов и
равны. Первое уравнение системы означает, что равны также их ортогональные проекции на ось
. Отсюда необходимо следует, что
получается из
поворотом вокруг
на некоторый угол. Найдём его.
Будем считать, что . Если это не так, отнормируем
, поделив его на квадратный корень из нормы, на векторе
это не отразится. Теперь мы можем считать, что
, где
. Также пользуясь первым уравнением и вводя обозначение
и подобное для
для ортогональных составляющих векторов
и
, мы можем преобразовать второе уравнение следующим образом:
.
Это уравнение примечательно тем, что составлено для проекций векторов и
на плоскость, в которой происходит вращение. Нам остаётся лишь заметить, что
— это вектор
, повернутый на
вокруг вектора
по часовой стрелке. Таким образом, первое равенство задаёт вектор
, повернутый вокруг
по часовой стрелке, а второе — вектор
, повернутый вокруг
против часовой стрелки. Отсюда окончательно получаем, что вектор
является повернутым вокруг вектора
против часовой стрелки на угол
вектором
.
Подводя некоторый итог, мы приходим к наиболее значимому выводу этой статьи: кватернион с единичной нормой вида
![](https://espresso.codeforces.com/45da06ce828af79f6bfb77dae68fba3f449b6efb.png)
![](https://espresso.codeforces.com/d8e55cc17e0078b12a3bc897d0c069e287f64696.png)
![](https://espresso.codeforces.com/503294e628d912707e59b699b8132da02190d33a.png)
![](https://espresso.codeforces.com/d8e55cc17e0078b12a3bc897d0c069e287f64696.png)
![](https://espresso.codeforces.com/59c59d429073b07e1536e504a87ddc14bf62fb42.png)
![](https://espresso.codeforces.com/f04a6e9c516d3e0a1a9884d30549ab72004e6dae.png)
[1] . Скалярная часть этого произведения равна
.