реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Поворот радиус-вектора на кватернион, что-то не сходится...
alexPec
сообщение Feb 15 2014, 21:14
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Всем добрый день.

Пытаюсь повернуть радиус-вектор единичной длины, совпадающий с одной из осей базовой СК на кватернион (и получить радиус-вектор единичной длины, совпадающий с осью повернутой СК):

1. Беру кватернион, соответствующий углам эйлера 45,0,30 (цифры везде округлю до сотых):

P1 = {0.89,0.37,0.24,0.1}

2. Беру радиус-вектор

{0,1,0}, представляю его кватернионом V = {0,0,1,0}

3. Нахожу обратный кватерниону Р1:

P2={0.89,-0.37,-0.24,-0.1}

4. Поворачиваю исходный радиус-вектор так:

P1*V*P2.

P1*V = {-0.24,-0.1,0.89,0.37}

(P1*V)*P2 = {0,0,0.7,0.7}

Что-то не так, т.к. P1 не имеет осей, лежащих в плоскости исходной СК, а результат (т.е. радиус-вектор) лежит в одной из плоскостей базовой СК (одна из координат =0).

Что делаю не так?
Ни или так: как проверить достоверно результаты?
Go to the top of the page
 
+Quote Post
Timmy
сообщение Feb 15 2014, 21:48
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Всё не такsm.gif. Постройте по кватерниону матрицу поворота и поворачивайте на ней любой вектор.
Go to the top of the page
 
+Quote Post
alexPec
сообщение Feb 16 2014, 07:40
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(Timmy @ Feb 16 2014, 01:48) *
Всё не такsm.gif. Постройте по кватерниону матрицу поворота и поворачивайте на ней любой вектор.


Думал раз уж есть кватернион, повернуть на него вектор проще чем строить матрицу поворота, а потом поворачивать.

Вообще надо подвижную систему координат, заданную кватернионом, повернуть вокруг одной из осей. Для этого нахожу этот радиус-вектор, совпадающий с осью подвижной СК, строю по нему кватернион поворота, и умножаю на него кватернион подвижной СК. Может я все делаю через сложно ?
Go to the top of the page
 
+Quote Post
Timmy
сообщение Feb 16 2014, 10:16
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(alexPec @ Feb 16 2014, 11:40) *
Думал раз уж есть кватернион, повернуть на него вектор проще чем строить матрицу поворота, а потом поворачивать.

Вообще надо подвижную систему координат, заданную кватернионом, повернуть вокруг одной из осей. Для этого нахожу этот радиус-вектор, совпадающий с осью подвижной СК, строю по нему кватернион поворота, и умножаю на него кватернион подвижной СК. Может я все делаю через сложно ?

Да, можно и прямо по кватерниону поворачивать с двумя умножениями. Судя по тому, что вы приводите цифры вместо кода(которого тут должно быть всего три строчки), вы так и не сделали библиотеку стандартных операций с кватернионами и матрицами, поэтому запросто можете допустить какую-нибудь ошибку в кодировании.
Go to the top of the page
 
+Quote Post
alexPec
сообщение Feb 16 2014, 10:59
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(Timmy @ Feb 16 2014, 14:16) *
Да, можно и прямо по кватерниону поворачивать с двумя умножениями. Судя по тому, что вы приводите цифры вместо кода(которого тут должно быть всего три строчки), вы так и не сделали библиотеку стандартных операций с кватернионами и матрицами, поэтому запросто можете допустить какую-нибудь ошибку в кодировании.

Ну выводы преждевременные, кода нет потому что написано (а точнее нарисовано) все в LabView. Привожу "код":

операция создания кватерниона из радиус-вектора и угла, нормирование, умножение получение кватерниона в степени -1. Остальное все как описано: создаем исходный кватернион с углами P=45,0,30; создаем вектор v={0,1,0}, ну и вычисляем P*v*P^-1

Умножение в символьном виде:

{a1,a2,a3,a4}*{b1,b2,b3,b4} = {a1b1-a2b2-a3b3-a4b4, a1b2+a2b1+a3b4-a4b3, a1b3+a3b1+a4b2-a2b4, a1b4+a4b1+a2b3-a3b2}. Остальное вроде на рисунках понятно.
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение

 
Go to the top of the page
 
+Quote Post
Timmy
сообщение Feb 16 2014, 12:45
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(alexPec @ Feb 16 2014, 01:14) *
1. Беру кватернион, соответствующий углам эйлера 45,0,30 (цифры везде округлю до сотых):

То есть это эквивалентно углам 75,0,0 и 0,0,75? Тогда ничего удивительного в результате нет.
Up: А судя по тому, что кватернион поворота не содержит при этом нулевой координаты, он вычислялся вовсе не по углам Эйлера, а как-то иначе.

Сообщение отредактировал Timmy - Feb 16 2014, 13:08
Go to the top of the page
 
+Quote Post
alexPec
сообщение Feb 16 2014, 17:57
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(Timmy @ Feb 16 2014, 16:45) *
Up: А судя по тому, что кватернион поворота не содержит при этом нулевой координаты, он вычислялся вовсе не по углам Эйлера, а как-то иначе.


А с чего это он должен содержать нулевую координату??? Вы бы не вводили в заблуждение, поверните СК по ДВУМ углам Эйлера (рисунок). А теперь попробуйте представить ось вращения, лежащую в одной из плоскостей базовой СК, поворотом вокруг которой можно получить подвижную СК, повернутую на 2 угла Эйлера. У меня не получилось. Подскажите если знаете.

Тему закрываю.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Timmy
сообщение Feb 17 2014, 10:37
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(alexPec @ Feb 16 2014, 21:57) *
А с чего это он должен содержать нулевую координату??? Вы бы не вводили в заблуждение, поверните СК по ДВУМ углам Эйлера (рисунок). А теперь попробуйте представить ось вращения, лежащую в одной из плоскостей базовой СК, поворотом вокруг которой можно получить подвижную СК, повернутую на 2 угла Эйлера. У меня не получилось. Подскажите если знаете.

Посмотрим на википедию: если второй угол, который бета, нулевой, то оси Z и z совпадают, поэтому первый и третий повороты выполняются вокруг общей оси и их углы просто складываются. В английской версии википедии так прямо и написано, кстати.
Ещё: вы, очевидно, использовали альтернативную нотацию. В Математике легко проверить:
Код
<<Quaternions`
aaq[axis_,angle_] := Quaternion[Cos[angle/2]*Norm[axis],Sin[angle/2]*axis[[1]], Sin[angle/2]*axis[[2]],Sin[angle/2]*axis[[3]]]
aaq[{1,0,0},45/180*Pi]**aaq[{0,0,1},0]**aaq[{0,1,0},30/180*Pi]//N
Quaternion[0.892399,0.369644,0.239118,0.0990458]

Вот так получается ваш кватернион, первое вращение вокруг Y, так что ваш единичный вектор вращается на 30 вокруг себя, а потом ещё на 45 вокруг x, всё правильно считается.


Сообщение отредактировал Timmy - Feb 17 2014, 18:22
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 17:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.01444 секунд с 7
ELECTRONIX ©2004-2016