Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с кватернионами 
:(
    Опции темы
GreyBeholder
Дата 28.11.2011, 01:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 28.11.2011

Репутация: нет
Всего: нет



Мыслительный процесс зашел в тупик smile Перечитал "всю сеть" про кватернионы и про матрицы вращения. Для понимания решил разобрать простой пример:
- Повернуть вектор (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] ????  smile 

В дальнейшем (когда прояснится ситуация) планирую умножать 3 кватерниона с углами поворота вокруг осей  XYZ чтобы получить кротчайший путь поворота. Но пока незнаю КАК ЭТО сделать. Пожалуйста направте на нужный путь.
Спасибо.
PM MAIL   Вверх
maxdiver
Дата 29.11.2011, 02:20 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 29.1.2008
Где: Саратов

Репутация: 16
Всего: 18



Чтобы по кватерниону поворота q и данной точке p узнать, в какую точку p' перейдёт эта точка p, надо посчитать:
Код

p' = q * p * ~q

(где звездочкой обозначено кватернионное произведение; точку p мы приводим к кватерниону, просто полагая w у неё нулю; тильдой обозначен сопряжённый кватернион - т.е. когда знаки компонент x,y,z изменены на противоположные; справа в итоге получится кватернион, но у него будет нулевая компонента w).

Это называется формулой Родрига, если не ошибаюсь.


Правда, чтобы получить такой же ответ, как у вас, надо использовать угол -29. Вероятно, где-то у нас расхождение в том, по или против часовой стрелки отсчитывается угол.


Чтобы "скомбинировать" три поворота, надо перемножить соответствующие кватернионы. В каком порядке перемножать кватернионы, и как ставить скобки в этом кватернионном произведении - понять не так просто, потому что всё зависит от того, что вы подразумеваете под разными поворотами: каждый следующий поворот задан в текущей системе координат, или задан в начальной/конечной системе координат. В общем, обычно проще экспериментальным путём подобрать правильный порядок произведения для конкретной задачи, чем ломать голову.
PM MAIL WWW ICQ   Вверх
GreyBeholder
Дата 2.12.2011, 01:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 28.11.2011

Репутация: нет
Всего: нет



Цитата(maxdiver @ 29.11.2011,  02:20)
Чтобы по кватерниону поворота q и данной точке p узнать, в какую точку p' перейдёт эта точка p, надо посчитать:
Код

p' = q * p * ~q

(где звездочкой обозначено кватернионное произведение; точку p мы приводим к кватерниону, просто полагая w у неё нулю; тильдой обозначен сопряжённый кватернион - т.е. когда знаки компонент x,y,z изменены на противоположные; справа в итоге получится кватернион, но у него будет нулевая компонента w).

Это называется формулой Родрига, если не ошибаюсь.


Правда, чтобы получить такой же ответ, как у вас, надо использовать угол -29. Вероятно, где-то у нас расхождение в том, по или против часовой стрелки отсчитывается угол.


Чтобы "скомбинировать" три поворота, надо перемножить соответствующие кватернионы. В каком порядке перемножать кватернионы, и как ставить скобки в этом кватернионном произведении - понять не так просто, потому что всё зависит от того, что вы подразумеваете под разными поворотами: каждый следующий поворот задан в текущей системе координат, или задан в начальной/конечной системе координат. В общем, обычно проще экспериментальным путём подобрать правильный порядок произведения для конкретной задачи, чем ломать голову.

Огромное спасибо. Все получилось. Сделал как написано. Вот и недостающее звено... !!! smile 

И угол действительно меняет знак.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0619 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.