"По заявкам трудящихся" привожу вывод более общей формулы кватерниона поворота по кратчайшему пути, когда исходные векторы могут иметь произвольную длину.
Кватернион поворота по кратчайшему пути, общий случай Нам даны два вектора и произвольной длины (но не нулевые!). Мы хотим найти такой поворот, который переведёт направление в направление по кратчайшему пути. Разумеется, задачу можно свести к предыдущей, отнормировав векторы и , но тогда нам понадобится в общей сложности три извлечения квадратного корня - мы можем и лучше!
Запишем, чему равны скалярное и векторное произведение и :
(7.10)
Снова выпишем кватернион поворота по кратчайшему пути:
(7.5)
и преобразуем его, принимая во внимание (7.10):
Принимая во внимание формулу косинуса двойного угла:
Получаем выражение:
Как и раньше, нам не требуется считать знаменатель «в лоб». Лучше найдём сначала ненормированный кватернион:
Причем можно заметить, что первое слагаемое требует извлечения только одного квадратного корня,
Далее, если , нормируем его и получаем ответ. Нулевое значение, как и раньше, возникает в ситуации, когда и направлены в противоположные стороны, . Тогда поворот на 180 градусов по любому из направлений будет одинаково «коротким», и нам придётся выбрать какой-нибудь из них самостоятельно, например, тем же способом, что в главе 7.1.
Тогда, итоговый метод выглядит так:
(7.11)
Одна из задач, где может пригодиться данный метод, такова. Мы делаем бесплатформенную инерциальную навигационную систему, причем иногда возникают моменты, когда нам говорят - никакого ускорения сейчас не действует, всё, что чувствует акселерометр - это сила тяжести. И тогда нам хочется подправить кватернион ориентации, чтобы хоть вертикальная ось стала сонаправлена вектору силы тяжести.
Взяв за вектор направление "вертикально вниз" в координатах прибора (с накопленным дрейфом), а за - показания акселерометра, по описанному методу мы можем посчитать корректирующий кватернион, на который надо будет помножить текущий кватернион ориентации, чтобы выправить вертикальную ось.
UPD. Страшно подумать - я начал писать этот ликбез уже чуть более года назад... Но не беспокойтесь - у меня в загашниках лежит 3 главы, которые я пока не переложил в формат ЖЖ, 2 приложения, список литературы, да и коллекция упражнений потихоньку набирается.