| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Помогите с кватернионами |
| Автор: GreyBeholder 28.11.2011, 01:45 |
| Мыслительный процесс зашел в тупик - Повернуть вектор (x,y,z) - > (5,10,15) вокруг оси Х на 29 градусов. Первое что сделал - повернул с помощью матрицы поворота с углами Эйлера - Получилось!!! |1 0 0 | [5, 10, 15] X |0 cos(a) -sin(a) | = [5, 16.0183, 8.2712] |0 sin(a) cos(a) | Построил в Solidworks - Все верно. Дальше пришло время сделать это используя кватернион, т.к. в дальнейшем будет задача поворачивать по 3-м углам Эйлера, а там всякие неприятности... Для перехода от углов Эйлера к кватернионам использую: Q.x = X*sin(a/2) Q.y = Y*sin(a/2) Q.z = Z*sin(a/2) Q.w = cos(a/2) Для своего случая получил кватернион [sin(29/2), sin(0/2), sin(0/2), cos(29/2)]=[0.25, 0, 0, 0.968] Как мне пристроить "ЭТО" к моему вектору [5, 10, 15] ???? В дальнейшем (когда прояснится ситуация) планирую умножать 3 кватерниона с углами поворота вокруг осей XYZ чтобы получить кротчайший путь поворота. Но пока незнаю КАК ЭТО сделать. Пожалуйста направте на нужный путь. Спасибо. |
| Автор: maxdiver 29.11.2011, 02:20 | ||
Чтобы по кватерниону поворота q и данной точке p узнать, в какую точку p' перейдёт эта точка p, надо посчитать:
(где звездочкой обозначено кватернионное произведение; точку p мы приводим к кватерниону, просто полагая w у неё нулю; тильдой обозначен сопряжённый кватернион - т.е. когда знаки компонент x,y,z изменены на противоположные; справа в итоге получится кватернион, но у него будет нулевая компонента w). Это называется формулой Родрига, если не ошибаюсь. Правда, чтобы получить такой же ответ, как у вас, надо использовать угол -29. Вероятно, где-то у нас расхождение в том, по или против часовой стрелки отсчитывается угол. Чтобы "скомбинировать" три поворота, надо перемножить соответствующие кватернионы. В каком порядке перемножать кватернионы, и как ставить скобки в этом кватернионном произведении - понять не так просто, потому что всё зависит от того, что вы подразумеваете под разными поворотами: каждый следующий поворот задан в текущей системе координат, или задан в начальной/конечной системе координат. В общем, обычно проще экспериментальным путём подобрать правильный порядок произведения для конкретной задачи, чем ломать голову. |
| Автор: GreyBeholder 2.12.2011, 01:14 | ||||
Огромное спасибо. Все получилось. Сделал как написано. Вот и недостающее звено... !!! И угол действительно меняет знак. |