[Перевод] Доступно о кватернионах и их преимуществах

wxyqyyeuvo5us3kwciwntw5uigq.png


От переводчика: ровно 175 лет и 3 дня назад были изобретены кватернионы. В честь этой круглой даты я решил подобрать материал, объясняющий эту концепцию понятным языком.

Концепция кватернионов была придумана ирландским математиком сэром Уильямом Роуэном Гамильтоном в понедельник 16 октября 1843 года в Дублине, Ирландия. Гамильтон со своей женой шёл в Ирландскую королевскую академию, и переходя через Королевский канал по мосту Брум Бридж, он сделал потрясающее открытие, которое сразу же нацарапал на камне моста.

$i^2=j^2=k^2=ijk=-1$

b3487a8a4aa6f5926a9232b84ba317b1.jpg


Памятная табличка на мосту Брум Бридж через Королевский канал в честь открытия фундаментальной формулы умножения кватернионов.

В этой статье я постараюсь объяснить концепцию кватернионов простым для понимания образом. Я объясню, как можно визуализировать кватернион, а также расскажу о разных операциях, которые можно выполнять с кватернионами. Кроме того, я сравню использование матриц, углов Эйлера и кватернионов, а затем попытаюсь объяснить, когда стоит использовать кватернионы вместо углов Эйлера или матриц, а когда этого делать не нужно.

Содержание


  • 1. Введение
  • 2. Комплексные числа
    • 2.1. Сложение и вычитание комплексных чисел
    • 2.2. Умножение комплексного числа на скалярное значение
    • 2.3. Произведение комплексных чисел
    • 2.4. Квадрат комплексных чисел
    • 2.5. Сопряжённые комплексные числа
    • 2.6. Абсолютное значение комплексного числа
    • 2.7. Частное двух комплексных чисел
  • 3. Степени $i$
  • 4. Комплексная плоскость
    • 4.1. Роторы
  • 5. Кватернионы
    • 5.1. Кватернионы как упорядоченная пара
    • 5.2. Сложение и вычитание кватернионов
    • 5.3. Произведение кватернионов
    • 5.4. Вещественный кватернион
    • 5.5. Умножение кватерниона на скалярную величину
    • 5.6. Чистые кватернионы
    • 5.7. Аддитивная форма кватерниона
    • 5.8. Единичный кватернион
    • 5.9. Бинарная форма кватерниона
    • 5.10. Сопряжённые кватернионы
    • 5.11. Норма кватерниона
    • 5.12. Нормализация кватерниона
    • 5.13. Обратный кватернион
    • 5.14. Скалярное произведение кватернионов
  • 6. Повороты
  • 7. Интерполяция кватернионов
    • 7.1. SLERP
      • 7.1.1. Разность кватернионов
      • 7.1.2. Возведение кватерниона в степень
      • 7.1.3. Дробная разность кватернионов
      • 7.1.4. Факторы, которые нужно учитывать
    • 7.2. SQUAD
  • 8. Заключение
  • 9. Загрузка демо
  • 10. Справочные материалы


Невозможно полностью понять кватернионы за 45 минут.

В этой статье чрезвычайно много математики, так что она не для слабаков.


В компьютерной графике для описания позиции в пространстве (перемещения), а также ориентации в пространстве (поворота) используются матрицы. Также можно также использовать одну матрицу преобразований для описания масштаба объекта. Эту матрицу можно считать «пространством базиса». Если умножить вектор или точку (или даже другую матрицу) на матрицу преобразований, то мы «преобразуем» этот вектор, точку или матрицу в пространство, представленное этой матрицей.

В этой статье я не буду в подробностях рассказывать о матрицах преобразований. Подробно о матрицах преобразований можно прочитать в моей статье Matrices.

В данной статье я хочу рассказать об альтернативном способе описания ориентации объекта (поворота) в пространстве при помощи кватернионов.


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

Наряду с хорошо известными множествами чисел (натуральным, целым, вещественным и рациональным), система комплексных чисел добавляет новое множество чисел, называемых мнимыми числами. Мнимые числа были придуманы для решения определённых уравнений, не имевших решений, например:

$x^2+1=0$


Чтобы решить это выражение, нам нужно заявить, что $x^2=-1$, а это, как известно, невозможно, потому что квадрат любого числа (положительного или отрицательного) всегда положителен.

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

Мнимое число имеет следующий вид:

$i^2=-1$


Не пытайтесь понять это допущение, потому что логичных причин его существования нет. Нам просто нужно принять, что $i$ — это просто некая величина, квадрат которой равен $-1$.

Множество мнимых чисел можно обозначить как $\mathbb{I}$.

Множество комплексных чисел (обозначаемое символом $\mathbb{C}$ — это сумма вещественного и мнимого числа в следующей форме:

$z=a+bi~~a,b\in\mathbb{R},~~i^2=-1$


Можно также заявить, что все вещественные числа являются комплексными с $b=0$, а все мнимые числа являются комплексными с $a=0$.

Сложение и вычитание комплексных чисел


Комплексные числа можно складывать и вычитать сложением и вычитанием вещественной и мнимой частей.

Сложение:

$(a_1+b_1i)+(a_2+b_2i)=(a_1+a_2)+(b_1+b_2)i$


Вычитание:

$(a_1+b_1i)-(a_2+b_2i)=(a_1-a_2)+(b_1-b_2)i$


Умножение комплексного числа на скалярное значение


Комплексное число умножается на скаляр умножением каждого члена комплексного числа на скаляр:

$\lambda(a+bi)=\lambda{a}+\lambda{b}i$


Произведение комплексных чисел


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

$\begin{array}{rcl}z_1 & = & (a_1+b_1i) \\ z_2 & = & (a_2+b_2i) \\ z_1z_2 & = & (a_1+b_1i)(a_2+b_2i) \\ & = & a_1a_2+a_1b_2i+b_1a_2i+b_1b_2i^2 \\ & = & (a_1a_2-b_1b_2)+(a_1b_2+b_1a_2)i\end{array}$


Квадрат комплексных чисел


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

$\begin{array}{rcl}z & = & (a+bi) \\ z^2 & = & (a+bi)(a+bi) \\ & = & (a^2-b^2)+2abi\end{array}$


Сопряжённые комплексные числа


Сопряжённой величиной комплексного числа является комплексное число с изменённым знаком мнимой части, обозначаемой как $\bar{z}$ или как $z^*$.

$\begin{array}{rcl}z & = & (a+bi) \\ z^* & = & (a-bi)\end{array}$


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

$\begin{array}{rcl}z & = & (a+bi) \\ z^* & = & (a-bi) \\ zz^* & = & (a+bi)(a-bi) \\ & = & a^2-abi+abi+b^2 \\ & = & a^2+b^2\end{array}$


Абсолютное значение комплексного числа


Мы можем использовать сопряжённое число комплексного числа, чтобы вычислить абсолютное значение (или норму, или величину) комплексного числа. Абсолютное значение комплексного числа — это квадратный корень из комплексного числа, умноженного на его сопряжённое число. Оно обозначается как $|z|$:

$\begin{array}{rcl}z & = & (a+bi) \\ |z| & = & \sqrt{zz^*} \\ & = & \sqrt{(a+bi)(a-bi)} \\ & = & \sqrt{a^2+b^2}\end{array}$


Частное двух комплексных чисел


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

$\begin{array}{rcl}z_1 & = & (a_1+b_1i) \\ z_2 & = & (a_2+b_2i) \\ \cfrac{z_1}{z_2} & = & \cfrac{a_1+b_1i}{a_2+b_2i} \\ & = & \cfrac{(a_1+b_1i)(a_2-b_2i)}{(a_2+b_2i)(a_2-b_2i)} \\ & = & \cfrac{a_1a_2-a_1b_2i+b_1a_2i-b_1b_2i^2}{a_2^2+b_2^2} \\ & = & \cfrac{a_1a_2+b_1b_2}{a_2^2+b_2^2}+\cfrac{b_1a_2-a_1b_2}{a_2^2+b_2^2}i \end{array}$


Если мы утверждаем, что $i^2=-1$, то должна существовать возможность возводить $i$ и в другие степени.

$\begin{array}{rrrrrrr}i^0 & = & & & & & 1 \\ i^1 & = & & & & & i \\ i^2 & = & & & & & -1 \\ i^3 & = & ii^2 & = & & & -i \\ i^4 & = & i^{2}i^{2} & = & & & 1 \\ i^5 & = & ii^4 & = & & & i \\ i^6 & = & ii^5 & = & i^2 & = & -1\end{array}$


Если мы продолжим записывать этот ряд, то заметим закономерность $(1,i,-1,-i,1,\dots)$.

Похожая закономерность возникает при увеличении отрицательных степеней.

$\begin{array}{rcr}i^0 & = & 1 \\ i^{-1} & = & -i \\ i^{-2} & = & -1 \\ i^{-3} & = & i \\ i^{-4} & = & 1 \\ i^{-5} & = & -i \\ i^{-6} & = & -1\end{array}$


Возможно, вы уже видели такую закономерность в математике, но в виде $(x,y,-x,-y,x,\dots)$, который получается поворотом точки на 90° против часовой стрелки на двухмерной декартовой плоскости; ряд $(x,-y,-x,y,x,\dots)$ создаётся поворотом точки на 90° градусов на двухмерной декартовой плоскости.

7ee016265905a34e6e27021c7a419105.png


Декартова плоскость
Мы можем аналогичным образом нанести комплексные числа на двухмерную сетку, называемую комплексной плоскостью, привязав вещественную часть к горизонтальной оси, а мнимую — к вертикальной.

e20914be6313213d1dd6bd05ca10c7c4.png


Комплексная плоскость

Как видно из предыдущего ряда, мы можем сказать, что если умножим комплексное число на $i$, то сможем поворачивать комплексное число на комплексной плоскости с шагом в 90°.

Давайте проверим, верно ли это. Мы возьмём на комплексной плоскости произвольную точку $p$:

$p=2+i$


и умножим её на $i$, получив $q$:

$\begin{array}{rcl}p & = & 2+i \\ q & = & pi \\ & = & (2+i)i \\ & = & 2i+i^2 \\ & = & -1+2i\end{array}$


Умножив $q$ на $i$, получим $r$:

$\begin{array}{rcl}q & = & -1+2i \\ r & = & qi \\ & = & (-1+2i)i \\ & = & -i+2i^2 \\ & = & -2-i\end{array}$


А умножив $r$ на $i$, получим $s$:

$\begin{array}{rcl}r & = & -2-i \\ s & = & ri \\ & = & (-2-i)i \\ & = & -2i-i^2 \\ & = & 1-2i\end{array}$


А умножив $s$ на $i$, получим $t$:

$\begin{array}{rcl}s & = & 1-2i \\ t & = & si \\ & = & (1-2i)i \\ & = & i-2i^2 \\ & = & 2+i\end{array}$


И мы получили ровно то, с чего начинали ($p$). Если нанести эти комплексные числа на комплексную плоскость, то получим следующий результат.

89c8a2da0a5c3f901a65024022ed2523.png


Комплексные числа на комплексной плоскости

Теперь мы можем выполнять поворот на комплексной плоскости и по часовой стрелке, умножая комплексное число на $-i$.

Роторы


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

$q=\cos\theta+i\sin\theta$


При умножении любого комплексного числа на ротор $q$ получаем общую формулу:

$\begin{array}{rcl} p & = & a + bi \\ q & = & \cos\theta+i\sin\theta \\ pq & = & (a+bi)(\cos\theta+i\sin\theta) \\ a^{\prime}+b^{\prime}i & = & a\cos\theta-b\sin\theta+(a\sin\theta+b\cos\theta)i \end{array}$


Что также можно записать в матричном виде:

$\begin{bmatrix} a^{\prime} & -b^{\prime} \\ b^{\prime} & a^{\prime} \end{bmatrix}=\begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix}\begin{bmatrix}a & -b \\b & a \end{bmatrix}$


Что является способом поворота против часовой стрелки произвольной точки на комплексной плоскости относительно точки начала координат.
Узнав о системе комплексных чисел и комплексной плоскости, мы можем вывести их в трёхмерное пространство, добавив к системе чисел наряду с $i$ ещё два мнимых числа.

Кватернионы имеют следующий обобщённый вид

$q=s+xi+yj+zk~~s,x,y,z\in\mathbb{R}$


Где в соответствии со знаменитым выражением Гамильтона:

$i^2=j^2=k^2=ijk=-1$

$\begin{array}{ccc}ij=k & jk=i & ki=j \\ ji=-k & kj=-i & ik=-j\end{array}$


Можно заметить, что отношения между $i$, $j$ и $k$ очень похожи на правила векторного умножения единичных декартовых векторов:

$\begin{array}{ccc}\mathbf{x}\times \mathbf{y}=\mathbf{z} & \mathbf{y}\times \mathbf{z}=\mathbf{x} & \mathbf{z}\times \mathbf{x}=\mathbf{y} \\ \mathbf{y}\times \mathbf{x}=-\mathbf{z} & \mathbf{z}\times \mathbf{y}=-\mathbf{x} & \mathbf{x}\times \mathbf{z}=-\mathbf{y}\end{array}$


Гамильтон также заметил, что мнимые числа $i$, $j$ и $k$ можно использовать для представления трёх декартовых единичных векторов $\mathbf{i}$, $\mathbf{j}$ и $\mathbf{k}$ с теми же свойствами мнимых чисел, так что $\mathbf{i}^2=\mathbf{j}^2=\mathbf{k}^2=-1$.

e538a2e2bdaaeaa1721bba02a0f35708.png


Графическое представление свойств $\mathbf{ij}$, $\mathbf{jk}$, $\mathbf{ki}$

На представленном выше изображении графически представлены взаимосвязи между декартовыми единичными векторами в виде $\mathbf{i}$, $\mathbf{j}$ и $\mathbf{k}$.

Кватернионы как упорядоченная пара


Также мы можем представить кватернионы в виде упорядоченной пары:

$q=[s,\mathbf{v}]~~s\in\mathbb{R}, \mathbf{v}\in\mathbb{R}^3$


Где $\mathbf{v}$ можно также представить как его отдельные компоненты:

$q=[s,x\mathbf{i}+y\mathbf{j}+z\mathbf{k}]~~s,x,y,z\in\mathbb{R}$


С помощью этой записи мы можем проще представить общие черты кватернионов и комплексных чисел.

Сложение и вычитание кватернионов


Кватернионы можно складывать и вычитать аналогично комплексным числам:

$\begin{array}{rcl}q_a & = & [s_a,\mathbf{a}] \\ q_b & = & [s_b,\mathbf{b}] \\ q_a+q_b & = & [s_a+s_b,\mathbf{a}+\mathbf{b}] \\ q_a-q_b & = & [s_a-s_b,\mathbf{a}-\mathbf{b}]\end{array}$


Произведения кватернионов


Также мы можем выразить произведение двух кватернионов:

$\begin{array}{rcl}q_a & = & [s_a,\mathbf{a}] \\ q_b & = & [s_b,\mathbf{b}] \\ q_{a}q_{b} & = & [s_{a},\mathbf{a}][s_{b},\mathbf{b}] \\ & = & (s_{a}+x_{a}i+y_{a}j+z_{a}k)(s_{b}+x_{b}i+y_{b}j+z_{b}k) \\ & = & (s_{a}s_{b}-x_{a}x_{b}-y_{a}y_{b}-z_{a}z_{b}) \\ & & +(s_{a}x_{b}+s_{b}x{a}+y_{a}z_{b}-y_{b}z_{a})i \\ & & +(s_{a}y_{b}+s_{b}y_{a}+z_{a}x_{b}-z_{b}x_{a})j \\ & & +(s_{a}z_{b}+s_{b}z_{a}+x_{a}y_{b}-x_{b}y_{a})k\end{array}$


Что даёт нам ещё один кватернион. Если мы заменим в предыдущем выражении мнимые числа $i$, $j$ и $k$ упорядоченными парами (также известными как кватернионные единицы), то получим

$i=[0,\mathbf{i}]~j=[0,\mathbf{j}]~k=[0,\mathbf{k}]$


А подставив обратно в исходное выражение с $[1,\mathbf{0}]=1$, получим:

$\begin{array}{rcl}[s_{a},\mathbf{a}][s_{b},\mathbf{b}] & = & (s_{a}s_{b}-x_{a}x_{b}-y_{a}y_{b}-z_{a}z_{b})[1,\mathbf{0}] \\ & & +(s_{a}x_{b}+s_{b}x{a}+y_{a}z_{b}-y_{b}z_{a})[0,\mathbf{i}] \\ & & +(s_{a}y_{b}+s_{b}y_{a}+z_{a}x_{b}-z_{b}x_{a})[0,\mathbf{j}] \\ & & +(s_{a}z_{b}+s_{b}z_{a}+x_{a}y_{b}-x_{b}y_{a})[0,\mathbf{k}]\end{array}$


Развернув это выражение в сумму упорядоченных пар, получим:

$\begin{array}{rcl}[s_{a},\mathbf{a}][s_{b},\mathbf{b}] & = & [s_{a}s_{b}-x_{a}x_{b}-y_{a}y_{b}-z_{a}z_{b},\mathbf{0}] \\ & & +[0,(s_{a}x_{b}+s_{b}x{a}+y_{a}z_{b}-y_{b}z_{a})\mathbf{i}] \\ & & +[0,(s_{a}y_{b}+s_{b}y_{a}+z_{a}x_{b}-z_{b}x_{a})\mathbf{j}] \\ & & +[0,(s_{a}z_{b}+s_{b}z_{a}+x_{a}y_{b}-x_{b}y_{a})\mathbf{k}]\end{array}$


Если умножить на кватернионную единицу и извлечь общие векторые компоненты, то можно переписать это уравнение следующим образом:

$\begin{array}{rcl}[s_{a},\mathbf{a}][s_{b},\mathbf{b}] & = & [s_{a}s_{b}-x_{a}x_{b}-y_{a}y_{b}-z_{a}z_{b},\mathbf{0}] \\ & & +[0,s_{a}(x_{b}\mathbf{i}+y_{b}\mathbf{j}+z_{b}\mathbf{k})+s_{b}(x_{a}\mathbf{i}+y_{a}\mathbf{j}+z_{a}\mathbf{k}) \\ & & +(y_{a}z_{b}-y_{b}z_{a})\mathbf{i}+(z_{a}x_{b}-z_{b}x_{a})\mathbf{j}+(x_{a}y_{b}-x_{b}y_{a})\mathbf{k}]\end{array}$


Это уравнение даёт нам сумму двух упорядоченных пар. Первая упорядоченная пара — это вещественный кватернион, а вторая — чистый кватернион. Две этих упорядоченных пары можно соединить в одну упорядоченную пару:

$\begin{array}{rcl}[s_{a},\mathbf{a}][s_{b},\mathbf{b}] & = & [s_{a}s_{b}-x_{a}x_{b}-y_{a}y_{b}-z_{a}z_{b}, \\ & & s_{a}(x_{b}\mathbf{i}+y_{b}\mathbf{j}+z_{b}\mathbf{k})+s_{b}(x_{a}\mathbf{i}+y_{a}\mathbf{j}+z_{a}\mathbf{k}) \\ & & +(y_{a}z_{b}-y_{b}z_{a})\mathbf{i}+(z_{a}x_{b}-z_{b}x_{a})\mathbf{j}+(x_{a}y_{b}-x_{b}y_{a})\mathbf{k}]\end{array}$


Если подставить, то мы получим

$\begin{array}{rcl}\mathbf{a} & = & x_{a}\mathbf{i}+y_{a}\mathbf{j}+z_{a}\mathbf{k} \\ \mathbf{b} & = & x_{b}\mathbf{i}+y_{b}\mathbf{j}+z_{b}\mathbf{k} \\ \mathbf{a}\cdot\mathbf{b} & = & x_{a}x_{b}+y_{a}y_{b}+z_{a}z_{b} \\ \mathbf{a}\times\mathbf{b} & = & (y_{a}z_{b}-y_{b}z_{a})\mathbf{i}+(z_{a}x_{b}-z_{b}x_{a})\mathbf{j}+(x_{a}y_{b}-x_{b}y_{a})\mathbf{k}\end{array}$


Получаем:

$[s_{a},\mathbf{a}][s_{b},\mathbf{b}]=[s_{a}s_{b}-\mathbf{a}\cdot\mathbf{b},s_{a}\mathbf{b}+s_{b}\mathbf{a}+\mathbf{a}\times\mathbf{b}]$


Это и есть общее уравнение произведения кватернионов.

Вещественный кватернион


Вещественный кватернион — это кватернион, в который входит вектор $\mathbf{0}$:

$q=[s,\mathbf{0}]$


А произведением двух вещественных кватернионов является ещё один вещественный кватернион:

$\begin{array}{rcl}q_a & = & [s_a,\mathbf{0}] \\ q_b & = & [s_b,\mathbf{0}] \\ q_{a}q_{b} & = & [s_a,\mathbf{0}][s_b,\mathbf{0}] \\ & = & [s_{a}s_{b},\mathbf{0}]\end{array}$


Что аналогично произведению двух комплексных чисел, содержащих нулевой мнимый член.

$\begin{array}{rcl}z_1 & = & a_1+0i \\ z_2 & = & a_2+0i \\ z_{1}z_{2} & = & (a_1+0i)(a_2+0i) \\ & = & a_{1}a_{2}\end{array}$


Умножение кватерниона на скалярную величину


Также мы можем умножать кватернион на скаляр, при этом придерживаясь следующего правила:

$\begin{array}{rcl}q & = & [s,\mathbf{v}] \\ \lambda{q} & = & \lambda[s,\mathbf{v}] \\ & = & [\lambda{s},\lambda\mathbf{v}]\end{array}$


Мы можем убедиться в этом с помощью показанного выше произведения вещественных кватернионов, умножив кватернион на скаляр как вещественный кватернион:

$\begin{array}{rcl}q & = & [s,\mathbf{v}] \\ \lambda & = & [\lambda,\mathbf{0}] \\ \lambda{q} & = & [\lambda,\mathbf{0}][s,\mathbf{v}] \\ & = & [\lambda{s},\lambda\mathbf{v}]\end{array}$


Чистые кватернионы


Кроме вещественных кватернионов, Гамильтон также определил чистый кватернион как кватернион с нулевым скалярным членом:

$q=[0,\mathbf{v}]$


Или если записать по компонентам:

$q=xi+yj+zk$


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

$\begin{array}{rcl}q_a & = & [0,\mathbf{a}] \\ q_b & = & [0,\mathbf{b}] \\ q_{a}q_{b} & = & [0,\mathbf{a}][0,\mathbf{b}] \\ & = & [-\mathbf{a}\cdot\mathbf{b},\mathbf{a}\times\mathbf{b}]\end{array}$


в соответствии с представленным выше правилом произведения кватернионов.

Аддитивная форма кватерниона


Кроме того, мы можем выразить кватернионы как сумму вещественной и чистой частей кватерниона:

$\begin{array}{rcl}q & = & [s,\mathbf{v}] \\ & = & [s,\mathbf{0}]+[0,\mathbf{v}]\end{array}$


Единичный кватернион


Взяв произвольный вектор $\mathbf{v}$, можно выразить этот вектор и через его скалярную величину, и через его направление следующим образом:

$\mathbf{v}=v\mathbf{\hat{v}}~\text{где}~v=|\mathbf{v}|~\text{и}~|\mathbf{\hat{v}}|=1$


Объединив это определение с определением чистого кватерниона, получим:

$\begin{array}{rcl}q & = & [0,\mathbf{v}] \\ & = & [0,v\mathbf{\hat{v}}] \\ & = & v[0,\mathbf{\hat{v}}]\end{array}$


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

$\hat{q}=[0,\mathbf{\hat{v}}]$


Бинарная форма кватерниона


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

$\begin{array}{rcl}q & = & [s,\mathbf{v}] \\ & = & [s,\mathbf{0}]+[0,\mathbf{v}] \\ & = & [s,\mathbf{0}]+v[0,\mathbf{\hat{v}}] \\ & = & s+v\hat{q}\end{array}$


Что даёт нам способ представить кватернион в форме, очень похожей на комплексные числа:

$\begin{array}{rcl}z & = & a+bi \\ q & = & s + v\hat{q}\end{array}$


Сопряжённое число кватерниона


Сопряжённое число кватерниона можно вычислить, взяв противоположную по знаку векторную часть кватерниона:

$\begin{array}{rcl}q & = & [s,\mathbf{v}] \\ q^* & = & [s,-\mathbf{v}]\end{array}$


Произведение кватерниона и его сопряжённого числа даёт нам следующее:

$\begin{array}{rcl}qq^* & = & [s,\mathbf{v}][s,-\mathbf{v}] \\ & = & [s^2-\mathbf{v}\cdot-\mathbf{v},-s\mathbf{v}+s\mathbf{v}+\mathbf{v}\times-\mathbf{v}] \\ & = & [s^2+\mathbf{v}\cdot\mathbf{v},\mathbf{0}] \\ & = & [s^2+v^2,\mathbf{0}]\end{array}$


Норма кватерниона


Вспомним определение нормы комплексного числа:

$\begin{array}{rcl}|z| & = & \sqrt{a^2+b^2} \\ zz^* & = & |z|^2\end{array}$


Аналогично, норма (или величина) кватерниона определяется как:

$\begin{array}{rcl}q & = & [s,\mathbf{v}] \\ |q| & = & \sqrt{s^2+v^2}\end{array}$


Что позволяет нам выразить норму кватерниона следующим образом:

$qq^*=|q|^2$


Нормализация кватерниона


Имея определение нормы кватерниона, мы можем использовать её для нормализации кватерниона. Кватернион нормализуется делением на $|q|$:

$q^{\prime}=\frac{q}{\sqrt{s^2+v^2}}$


Например, давайте нормализуем кватернион:

$q=[1,4\mathbf{i}+4\mathbf{j}-4\mathbf{k}]$


Сначала нам нужно вычислить норму кватерниона:

$\begin{array}{rcl}|q| & = & \sqrt{1^2+4^2+4^2+(-4)^2} \\ & = & \sqrt{49} \\ & = & 7\end{array}$


Затем мы должны разделить кватернион на норму кватерниона, чтобы вычислить нормализованный кватернион:

$\begin{array}{rcl}q^{\prime} & = & \cfrac{q}{|q|} \\[1.0em] & = & \cfrac{(1+4\mathbf{i}+4\mathbf{j}-4\mathbf{k})}{7} \\[1.0em] & = & \cfrac{1}{7}+\cfrac{4}{7}\mathbf{i}+\cfrac{4}{7}\mathbf{j}-\cfrac{4}{7}\mathbf{k}\end{array}$


Обратный кватернион


Обратный кватернион обозначается как 

$q^{-1}$

. Для вычисления обратного кватерниона мы берём сопряжённое число кватерниона и делим его на квадрат нормы:

$q^{-1}=\frac{q^*}{|q|^2}$


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

$qq^{-1}=[1,\mathbf{0}]=1$


И умножить обе стороны на сопряжённое число кватерниона, что даст нам:

$q^{*}qq^{-1}=q^{*}$


Подстановкой мы получаем:

$\begin{array}{rcl}|q|^{2}q^{-1} & = & q^{*} \\ q^{-1} & = & \cfrac{q^{*}}{|q|^{2}}\end{array}$


Для единичных кватернионов-норм, норма которых равна 1, мы можем записать:

$q^{-1}=q^{*}$


Скалярное произведение кватернионов


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

$\begin{array}{rcl}q_1 & = & [s_1,x_1\mathbf{i}+y_1\mathbf{j}+z_1\mathbf{k}] \\ q_2 & = & [s_2,x_2\mathbf{i}+y_2\mathbf{j}+z_2\mathbf{k}] \\ q_1{\cdot}q_2 & = & s_{1}s_{2}+x_{1}x_{2}+y_{1}y_{2}+z_{1}z_{2}\end{array}$


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

$\cos\theta=\frac{s_{1}s_{2}+x_{1}x_{2}+y_{1}y_{2}+z_{1}z_{2}}{|q_{1}||q_{2}|}$


Для единичных кватернионов-норм мы можем упростить уравнение:

$\cos\theta=s_{1}s_{2}+x_{1}x_{2}+y_{1}y_{2}+z_{1}z_{2}$


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

$q=\cos\theta+i\sin\theta$


Благодаря схожести комплексных чисел с кватернионами должна существовать возможность выразить кватернион, который можно использовать для поворота точки в трёхмерном пространстве:

$q=[\cos\theta,\sin\theta\mathbf{v}]$


Давайте проверим, верна ли эта теория, вычислив произведение кватерниона

$q$

и вектора

$\mathbf{p}$

. Во-первых, мы можем выразить

$\mathbf{p}$

как чистый кватернион в следующем виде:

$p=[0,\mathbf{p}]$


А $q$ — это единичный кватернион-норма в виде:

$q=[s,\lambda\mathbf{\hat{v}}]$


Тогда

$\begin{array}{rcl}p^{\prime} & = & qp \\ & = & [s,\lambda\mathbf{\hat{v}}][0,\mathbf{p}] \\ & = & [-\lambda\mathbf{\hat{v}}\cdot\mathbf{p},s\mathbf{p}+\lambda\mathbf{\hat{v}}\times\mathbf{p}]\end{array}$


Мы видим, что результатом является общий кватернион со скалярной и векторной частями.

Давайте сначала рассмотрим «особый» случай, при котором $\mathbf{p}$ перпендикулярен $\mathbf{\hat{v}}$. В таком случае член скалярного произведения $-\lambda\mathbf{\hat{v}}\cdot\mathbf{p}=0$ и результат становится чистым кватернионом:

$p^{\prime}=[0,s\mathbf{p}+\lambda\mathbf{\hat{v}}\times\mathbf{p}]$


В таком случае для поворота $\mathbf{p}$ относительно $\mathbf{\hat{v}}$ мы просто подставляем $s=\cos\theta$ и $\lambda=\sin\theta$.

$p^{\prime}=[0,\cos\theta\mathbf{p}+\sin\theta\mathbf{\hat{v}}\times\mathbf{p}]$


Например, давайте повернём вектор $\mathbf{p}$ на 45° относительно оси Z; тогда наш кватернион $q$ будет равен:

$\begin{array}{rcl}q & = & [\cos\theta,\sin\theta\mathbf{k}] \\ & = & \left[\frac{\sqrt{2}}{2},\frac{\sqrt{2}}{2}\mathbf{k}\right]\end{array}$


И давайте возьмём вектор $\mathbf{p}$, который относится к особому случаю, где $\mathbf{p}$ перпендикулярен $\mathbf{k}$:

$p=[0,2\mathbf{i}]$


Теперь давайте найдём произведение

$qp$

:

$\begin{array}{rcl}p^{\prime} & = & qp \\ & = & \left[\frac{\sqrt{2}}{2},\frac{\sqrt{2}}{2}\mathbf{k}\right][0,2\mathbf{i}] \\ & = & \left[0,2\frac{\sqrt{2}}{2}\mathbf{i}+2\frac{\sqrt{2}}{2}\mathbf{k}\times\mathbf{i}\right] \\ & = & [0, \sqrt{2}\mathbf{i}+\sqrt{2}\mathbf{j}]\end{array}$


Что даёт нам чистый кватернион, повёрнутый на 45° относительно оси $\mathbf{k}$. Мы можем также убедиться, что величина конечного вектора сохранилась:

$\begin{array}{rcl}|\mathbf{p}^{\prime}| & = & \sqrt{\sqrt{2}^{2}+\sqrt{2}^{2}} \\ & = & 2\end{array}$


В точности то, чего мы и ожидали!

Мы можем показать это графически следующим изображением:

e9d87b2c9784e8dfaa4c173efe8adb85.png


Поворот кватерниона (1)

Теперь давайте рассмотрим кватернион, не ортогональный к $\mathbf{p}$. Если мы примем для векторной части кватерниона смещение в 45° от $\mathbf{p}$, то получим:

$\begin{array}{rcl}\mathbf{\hat{v}} & = & \frac{\sqrt{2}}{2}\mathbf{i}+\frac{\sqrt{2}}{2}\mathbf{k} \\ \mathbf{p} & = & 2\mathbf{i} \\ q & = & [\cos\theta,\sin\theta\mathbf{\hat{v}}] \\ p & = & [0,\mathbf{p}]\end{array}$


А умножив наш вектор $\mathbf{p}$ на $q$, получим:

$\begin{array}{rcl}p^{\prime} & = & qp \\ & = & [\cos\theta,sin\theta\mathbf{\hat{v}}][0,\mathbf{p}] \\ & = & [-\sin\theta\mathbf{\hat{v}}\cdot\mathbf{p},\cos\theta\mathbf{p}+\sin\theta\mathbf{\hat{v}}\times\mathbf{p}]\end{array}$


После подстановки $\mathbf{\hat{v}}$, $\mathbf{p}$ и $\theta=45^{\circ}$ получаем:

$\begin{array}{rcl}p^{\prime} & = & \left[-\frac{\sqrt{2}}{2}\left(\frac{\sqrt{2}}{2}\mathbf{i}+\frac{\sqrt{2}}{2}\mathbf{k}\right)\cdot(2\mathbf{i}),\frac{\sqrt{2}}{2}2\mathbf{i}+\frac{\sqrt{2}}{2}\left(\frac{\sqrt{2}}{2}\mathbf{i}+\frac{\sqrt{2}}{2}\mathbf{k}\right)\times2\mathbf{i}\right] \\ & = & [-1,\sqrt{2}\mathbf{i}+\mathbf{j}]\end{array}$


То есть это больше не чистый кватернион, он не повёрнут на 45°, а норма вектора больше не равна 2 (она уменьшилась до $\sqrt{3}$).

Этот результат можно показать графически.

e1d48302f030b7045af4fbbb908a8d23.png


Поворот кватерниона (2)

Строго говоря, некорректно представлять кватернион $p^{\prime}$ в трёхмерном пространстве, потому что на самом деле это четырёхмерный вектор! Ради упрощения я покажу только векторный компонент кватернионов.


Однако не всё потеряно. Гамильтон выяснил (но не опубликовал этого), что если мы затем умножим результат $qp$ на значение, обратное $q$, то результатом будет чистый кватернион, а норма векторного компонента сохранится. Давайте посмотрим, можно ли применить это в нашем примере.

Для начала давайте вычислим $q^{-1}$:

$\begin{array}{rcl}q & = & \left[\cos\theta,\sin\theta\left(\frac{\sqrt{2}}{2}\mathbf{i}+\frac{\sqrt{2}}{2}\mathbf{k}\right)\right] \\ q^{-1} & = & \left[\cos\theta,-\sin\theta\left(\frac{\sqrt{2}}{2}\mathbf{i}+\frac{\sqrt{2}}{2}\mathbf{k}\right)\right]\end{array}$


При $\theta=45^{\circ}$ получаем:

$\begin{array}{rcl}q^{-1} & = & \left[\frac{\sqrt{2}}{2},-\frac{\sqrt{2}}{2}\left(\frac{\sqrt{2}}{2}\mathbf{i}+\frac{\sqrt{2}}{2}\mathbf{k}\right)\right] \\ & = & \frac{1}{2}\left[\sqrt{2},-\mathbf{i}-\mathbf{k}\right]\end{array}$


Объединив предыдущее значение $qp$ и $q^{-1}$, получим:

$\begin{array}{rcl}qp & = & \left[-1,\sqrt{2}\mathbf{i}+\mat
    
            <p class=© Habrahabr.ru