Top.Mail.Ru
Ответы
Аватар пользователя
6лет
Изменено

Линейная алгебра кватернион.

Изучая кватернион, я понял что между кватернионом и векторным умножением есть большая связь. Результатом векторного умножения двух векторов будет вектор, перпендикулярный плоскости этих двух векторов, если по простому если вектор а поменял свое положение в пространстве, то векторное произведение начального и конечного положения вектора - даст ось вращения. В кватернион кроме вектора (оси вращения) заложена величина поворота в радианах и направление, за это отвечает длина вектора и 4 параметр. Мне не понятно - глядя на кватернион как понять на сколько радиан он повернется и в какую сторону по часовой или против часовой - если смотреть на вектор кватерниона как на штопор, где ручка штопора это начало координат. Спасибо за ваши ответы

По дате
По рейтингу
Аватар пользователя
Новичок
6лет

сам заметил? тогда молодец.

исторически сначала Гамильтон придумал кватернионы, потом уже играясь с ними придумал и скалярное и векторное умножение обычных 3-мерных векторов.

поворот делается не просто умножением, а парой умножений. Тогда первая компонента будет косинусом половинного угла поворота, а 3 следующие - осью.

я когда-то писал это для коллег, сейчас скопирую сюда:
---------------------

Любой поворот 3-мерного пространства всегда можно представить как поворот вокруг какой-то оси (Эйлер).

Мы описываем поворот кватернионом длины 1. Любой поворот (включая и нулевой) - длина 1.

Как получить кватернион для поворота:
поворот вокруг оси (x, y, z) на угол a описывается кватернионом q = cos(a/2) + (i*x + j*y + k*z) * (sin(a/2) / корень (x^2 + y^2 + z^2)).
То есть, первая (действительная) компонента - косинус половинного угла, остальные (мнимые) компоненты - тот самый вектор, вокруг которого поворачиваем. Сомножитель с синусом и корнем - просто подгонка длины кватерниона под единицу.

Как повернуть:
чтобы повернуть какой-то 3-мерный вектор v (a, b, c) на кватернион q, надо посчитать q^(-1)*v*q. Представляем поворачиваемый вектор как кватернион a*i + b*j + c*k (действительная часть - ноль) и перемножаем.

Найти q^(-1) - просто, для единичных кватернионов надо просто взять ту же действительную часть, а у всей мнимой поменять знак.

И еще: нетрудно заметить, что q и -q описывают один и тот же поворот. Все естественно: поворот глобуса вокруг вектора, идущего из центра к сев. полюсу на +90 - то же самое, что поворот вокруг вектора, идущего из центра к южному, но на -90. Обычно нам это никак не мешает.