А теперь перейдем к заданию поворотов при помощи кватернионов.
Здесь, так же как и в случае с матрицами, есть активная и пассивная точка зрения.
И давайте проиллюстрируем их на примере знакомой уже вам задачи ― о повороте
вектора в плоскости XY вокруг оси Z.
Задача следующая.
У нас есть система координат.
Оси X, Y.
Ось Z перпендикулярно плоскости доски смотрит на нас.
И вектор r под углом φ, равном 45°,
между r и осью X.
Что мы сделаем?
Нам необходимо выписать кватернион поворота, который поворачивает вектор r на
угол 45°, на угол α = 45°,
и вычислить, в какой вектор перейдет наш вектор r.
На лекции вам говорили,
что вектора при помощи кватернионов преобразуются следующим образом.
Λ кватернион поворота, кватернион мы умножаем на исходный вектор r,
и кватернион мы домножаем на Λ сопряженный,
где Λ ― это кватернион поворота, нормированный кватернион.
Для нашей задачи кватернион Λ можно выписать следующим образом.
Это cos(α/2) ― поворачиваем на угол α ―
плюс ось поворота на sin(α/2).
Мы договорились, что поворачиваем вектор r вокруг оси Z.
Поэтому вектор e в нашем случае — это вектор с координатами
(0; 0; 1) на sin(α/2).
Теперь сопряженный кватернион
― это cos(α/2) − (0;
0; 1) * sin(α/2).
Давайте найдем, во что перейдет наш вектор r,
в какой вектор преобразуется.
Исходный вектор r имеет компоненты в системе координат XYZ
следующие: по X — это r, длина вектора,
* cosφ, угол φ ― это угол между r и X.
По Y: r * sinφ, и по Z ― ноль.
Теперь давайте кватернионы перемножим.
Λ на r и на Λ сопряженный.
Что это будет?
Выпишем кватернионы в виде четырехмерных векторов ― так нам удобнее будет
производить перемножение.
Скалярная часть у кватерниона Λ ― cos(α/2),
далее векторная часть 0, 0, sin(α/2).
Умножим кватернион на вектор r, который как четырехмерный вектор будет выглядеть:
0 — скалярная часть, и дальше его векторная часть ― r * cosφ,
r * sinφ и 0.
И кватернион мы домножаем на Λ сопряженный.
Это cos(α/2), 0, 0 и −sin(α/2).
Давайте будем перемножать по шагам.
Сначала первый множитель оставим без изменений ― cos(α/2), 0, 0, sin(α/2),
и кватернион мы домножим на результат произведения эти двух кватернионов.
Скалярная часть — это произведение скалярных частей
минус скалярное произведение векторных частей.
Что мы видим в нашем случае: 0 * cos(α/2) = 0,
и скалярное произведение векторных частей тоже дает 0.
Получаем, что скалярная часть произведения 0.
Далее, векторная часть.
Мы должны скалярную часть одного кватерниона умножить на векторную часть
другого.
В данном случае скалярная часть 0 на векторную часть не влияет, будет 0, 0, 0.
Далее, вторая скалярная часть умножить на векторную часть первого кватерниона.
Здесь уже мы видим, что есть результат.
Это r * cosφ * cos(α/2)
+ r * sinφ * *
cos(α/2), можно выписать нолик,
чтобы было понятно, что получилось.
И осталось добавить векторное произведение векторных частей.
Смотрим, первая компонента векторного произведения векторных частей
— это − r * sinφ на sin(α/2).
Вторая компонента произведения векторных частей
— это + r * cosφ
sin(α/2), и третья компонента ― 0.
[ЗВУК] Давайте преобразуем второй кватернион.
Первый пока так же выпишем, без изменений ― cos(α/2), 0, 0, sin(α/2).
И умножим кватернион
на преобразованный вот этот кватернион.
Что мы видим?
Что здесь на самом деле первая компонента векторной части — это косинус суммы углов.
Скалярная часть 0, r * cos(φ + α/2)
cos(φ + α/2),
а вторая компонента — это синус суммы углов.
То есть r * sin(φ + α/2).
И третья компонента ― 0.
Теперь перемножим вот эти два кватерниона выписанные.
Поступаем точно так же: значит,
скалярная часть кватерниона — это произведение скалярных частей,
равно нулю, минус скалярное произведение векторных частей — тоже 0.
Далее, получаем первую компоненту
векторной части.
Вообще, как мы должны получить векторную часть?
Домножаем скалярную часть на векторную часть.
В данном случае получается r * cos(φ + α/2) * cos(α/2).
Так, r * sin(φ +
α/2) * cos(α/2) и 0.
Произведение скалярной части второго кватерниона на векторную часть первого
дает 0.
Остается вычислить векторное произведение векторных частей.
Первая компонента −
r * sin(φ + α/2) ― я выпишу сюда
― первая компонента 0,
вторая компонента − r * sin(φ
+ α/2) * sin(α/2).
Вторая компонента
+ r * cos(φ + α/2) * sin(α/2).
Третья компонента 0.
Здесь добавим знак +, чтобы формула не была
обрубленной, и преобразуем кватернион.
Скалярная часть ― 0, первая компонента векторной
части — это опять косинус суммы углов, то есть r * cos(φ + α).
Вторая компонента — это синус суммы: r * sin(φ + α).
И третья компонента ― 0.
Если мы подставим наши заданные величины,
что φ = 45° и α = 45°,
то получим,
что вектор r после преобразования кватернионом
переходит в следующий вектор 0,
cos90° = 0, sin90° = 1,
значит будет r, и третья компонента 0.
То есть на самом деле наш вектор r после преобразования будет иметь компоненты 0,
r, 0.
Что мы могли получить сразу, посмотрев на рисунок и поняв,
что будет с вектором r после поворота на угол 45°?
Он действительно перейдет и совпадет с осью Y.
[ЗВУК] Но этот же
результат мы получили при помощи кватерниона.
Спасибо за внимание, активная точка зрения рассмотрена.