nabbla (nabbla1) wrote,
nabbla
nabbla1

Categories:

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

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

Хотел уложиться в 3 части, но похоже, их будет по крайней мере 5 - Остапа понесло!

Сегодняшняя - самая оригинальная и оттого спорная. Надеюсь, математиков не хватит удар от вольностей, которые автор себе позволяет в отношении пределов и производных - по-хорошему следовало бы развить теорию функций кватернионного переменного, а только потом такие вещи вытворять, но у нас времени нет!

Запись вращения через кватернионы

Малые углы
Допустим, мы хотим повернуть вектор x вокруг оси, заданной единичным вектором n, на малый угол dφ.
Это легко осуществляется с помощью векторного произведения. Приращение вектора x составит

eq3_1.png

а новый вектор будет равен
eq3_2.png

Кажется, что уже начинают вырисовываться кватернионы – для того, чтобы вектор повернулся, нам нужно как умножение на константу (в нашем случае на единицу), так и векторное произведение, обе вещи в кватернионе присутствуют. Сделаем первую «наивную» попытку записать кватернион поворота:


eq3_3.png

Помножим его справа на вектор x:
eq3_4.png

Итак, мы получили два правильных слагаемых, но ещё «в нагрузку» - скалярное произведение, которое безобидно при осуществлении одного поворота, но при попытке выполнить следующий поворот эта скалярная компонента начнёт «мешаться», внося лишние векторные слагаемые.

Решение сразу же взять «мнимую часть», или векторную часть – нам не подходит, поскольку мы хотим получить ассоциативность, когда мы можем применить к вектору поворот 1, а затем поворот 2, а можем перемножить эти повороты, получая итоговый поворот, и уже его применять к векторам. Сложение и умножение кватернионов ассоциативно, однако взятие мнимой части, очевидно – нет! Поэтому нужно придумать способ избавиться от этого скалярного произведения с помощью одних лишь сложений и умножений.

Скажем, помножить теперь результат на сопряженный кватернион Λ справа:
eq3_5.png

Хитрость в том, что из-за перемены знака векторной части уйдёт скалярное произведение, а векторное произведение удвоится, так как кроме перемены знака изменился и порядок сомножителей. Величины, в которые входит dφ2, не имеют значения, поскольку мы пока рассматриваем малые (бесконечно малые) повороты.

Осталось только избавиться от двойки при векторном произведении, переопределив кватернион малого поворота:
eq3_6.png

а формула для поворота вектора с помощью кватерниона примет вид:
eq3_7.png

В литературе гораздо чаще встречается запись, где вместо сопряженного кватерниона берется обратный. Как мы знаем, для единичных кватернионов эти записи идентичны, а кватернионы поворота обязаны быть единичными. По ходу дела из-за ошибок вычислений это может нарушаться, но не столь критично, чтобы в формуле (3.2) каждый раз считать обратный кватернион (делить на квадрат модуля). Мало того, в большинстве приложений нам не обязательно, чтобы получившийся вектор был единичным. К примеру, переходить в сферические координаты с формулой наподобие

θ = arcsin(y)

настоятельно не рекомендуется - даже при идеально единичном кватернионе из-за ошибок арифметики может получиться значение y большее единицы - последствия могут быть катастрофическими! А более подходящей формуле

θ = atan2(sqrt(x^2+z^2), y)

уже наплевать на единичность вектора.

Композиция поворотов
Мы повернули вектор x кватернионом Λ и получили вектор y. Повернём теперь его с помощью кватерниона Μ:
eq3_8.png

где
eq3_9.png

Иными словами, применение нескольких поворотов эквивалентно применению одного поворота, кватернион которого равен произведению кватернионов соответствующих поворотов.

Большие (конечные) углы
И наконец, найдём формулу кватерниона для поворота на угол φ вокруг оси n.

Изложенное ниже не является математически строгим выводом (это потребовало бы весьма углубленного изучения), но по счастью, как только мы получим формулу, мы можем доказать её истинность прямой подстановкой. В большинстве книг так и делается: все приведенные выше формулы приводятся как данность с указанием «можете проверить – всё будет как надо!».
Вариант 1: поделим угол φ на N частей. Кватернион поворота на угол φ/N запишется как
eq3_10.png

а итоговый кватернион – как произведение N одинаковых кватернионов Λ:
eq3_11.png

Устремляя N к бесконечности, мы должны получить кватернион поворота на угол φ. Данное выражение чрезвычайно похоже на второй замечательный предел:
eq3_12.png

так что чисто интуитивно мы можем предположить, что и в нашем случае должна «вылезти» экспонента, что бы она ни значила:
eq3_13.png

Вариант 2: запишем кватернион поворота на угол φ вокруг оси n как некоторую функцию:
eq3_14.png

Чтобы повернуться на угол φ+dφ, мы можем применить сначала кватернион M(φ), а потом домножить его на 1+(dφ/2)n, т.е мы можем записать:
eq3_15.png
откуда:
eq3_26.png

с начальным условием Μ(0)=1.
Отсюда снова «видны уши» экспоненты, но теперь уже есть способ выписать в явном виде, как именно она считается. А именно, с помощью диффура мы можем разложить Μ(φ) в ряд Тейлора вблизи нуля. Запишем производную:
eq3_16.png

Данное выражение мы можем дифференцировать сколько угодно раз, и каждый раз для взятия производной достаточно будет домножить значение предыдущей производной на (1/2)n.
Поехали:
eq3_17.png

Разложение в ряд Тэйлора окажется следующим:
eq3_18.png

Вполне себе экспонента! Осталось сообразить, чему она равна.
Посмотрим, что будет, если умножать векторную (мнимую) часть кватерниона на себя:
eq3_19.png

т.к n – единичный вектор. Помножим ещё раз:
eq3_20.png

И ещё раз помножим:
eq3_21.png

Итак, по аналогии с мнимой единицей, единичный вектор (т.е кватернион с модулем единица и нулевой скалярной частью) при возведении в степень может иметь лишь 4 разных значения, которые циклически повторяются. Два из них – чисто скалярные (действительные), другие – векторные (мнимые), что позволяет разделить ряд на две части:
eq3_22.png

Итак, мы обнаружили, что по аналогии с формулой Эйлера для комплексных чисел
eq3_23.png

мы можем определить экспоненту для кватернионов так, что
eq3_24.png

для произвольного единичного вектора n, и тогда кватернион поворота на угол φ вокруг оси n будет иметь вид:
eq3_25.png

Как правило, в литературе приводится без вывода формула (3.5), поскольку многие математики считают, что "кватернионная экспонента" не заслужила права называться экспонентой. Для неё не выполняется правило

exp(a+b) = exp(a)exp(b), что кажется определяющим правилом для возведения в степень. Точнее, это соотношение выполняется лишь для кватернионов, векторные части которых коллинеарны.

Это происходит от того, что для кватернионов не работает «бином Ньютона». Мы можем записать
(a+b)2=a2+ab+ba+b2,
а поскольку ab не обязано равняться ba, упростить это выражение мы не можем.

Всё это вопрос «вкуса» - если мы определим экспоненту просто как функцию от одного аргумента, вычисляемую как сумма бесконечного ряда, то почему бы и нет? Легко доказать, что если для используемых чисел выполняется коммутативность умножения, то exp(a+b)=exp(a)exp(b), в противном случае - вовсе не обязательно.

Автору кажется, что использование экспоненты проводит мостик между комплексными числами и кватернионами, а чтобы уберечься от неправильных выкладок, достаточно всегда писать экспоненту в форме exp(x), а не как ex, чтобы не приписывать ей тех свойств, которыми она в данном случае не обладает.

В последующих частях мы немного обсудим "глубокий смысл" половинного угла в (3.5) и покажем, как математика кватернионов применяется в задачах ориентации космических аппаратов.
Tags: кватернионы-это просто (том 1), математика, работа
Subscribe

  • Лестница для самых жадных

    В эти выходные побывал на даче, после 3-недельной "самоизоляции". Забавно, как будто зима началась! Особенно грязные галоши остались на улице, в…

  • Возвращаемся к макету

    Очень давно макетом видеоизмерителя параметров сближения не занимался: сначала "громко думал" по поводу измерения его положения на аппарате, а потом…

  • Минутка живописи

    В процессе разгребания содержимого квартиры (после нескольких ремонтов) дошёл, наконец, и до картин. В кои-то веки их повесил. Куда их вешать -…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 25 comments

  • Лестница для самых жадных

    В эти выходные побывал на даче, после 3-недельной "самоизоляции". Забавно, как будто зима началась! Особенно грязные галоши остались на улице, в…

  • Возвращаемся к макету

    Очень давно макетом видеоизмерителя параметров сближения не занимался: сначала "громко думал" по поводу измерения его положения на аппарате, а потом…

  • Минутка живописи

    В процессе разгребания содержимого квартиры (после нескольких ремонтов) дошёл, наконец, и до картин. В кои-то веки их повесил. Куда их вешать -…