Доброго времени суток, уважаемые формучане.
Столкнулся со следующей задачей: имеется датчик абсолютной ориентации, который умеет возвращать готовое значение в углах Эйлера
или в виде кватерниона
. С подобной задачей ранее сталкиваться не приходилось, либо матан успешно выветрился за прошедшие годы. Собственно, есть условно плоская прямоугольная поверхность, а требуется получить углы наклона. Пошерстив интернет, пришел к следующему решению:
Отложим на осях
(
) и
(
) единичные векторы, то бишь с координатами
и
соответственно. Теперь, при помощи кватерниона вращаем эти векторы, чтоб получить координаты точек концов векторов после поворота, но в исходной системе координат. Нашел вот такое решение:
На примере
. Сперва получаем промежуточный вектор.
Затем вычисляем результирующий ветор (
)
Далее, благодаря формуле
, находим косинус угла между вектором
и осью
. Ну а угол между
и
будет его дополнением, то есть
.
С вектором
ситуация аналогичная.
Собственно, полученные результаты меня смущают. Либо криво закодил, либо решение ошибочное, так что прошу подтвердить или исправить меня. Если с векторами и матрицами могли быть разве что глупые ошибки вроде опечаток, то с кватернионами все плохо - вроде бы, понимаю геометрический смысл, но вот как были выведены формулы выше - для меня темный лес. Везде написано - как складывать, умножать и так далее кватернионы, а вот как получить координаты точки после поворота, зная кватернион - нигде не нашел, хотя, это, вроде бы, очевидный кейс.
Заранее благодарен всем неравнодушным.