|
|
  |
Поворот радиус-вектора на кватернион, что-то не сходится... |
|
|
|
Feb 15 2014, 21:14
|
Профессионал
    
Группа: Свой
Сообщений: 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).
Что делаю не так? Ни или так: как проверить достоверно результаты?
|
|
|
|
|
Feb 16 2014, 07:40
|
Профессионал
    
Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968

|
Цитата(Timmy @ Feb 16 2014, 01:48)  Всё не так  . Постройте по кватерниону матрицу поворота и поворачивайте на ней любой вектор. Думал раз уж есть кватернион, повернуть на него вектор проще чем строить матрицу поворота, а потом поворачивать. Вообще надо подвижную систему координат, заданную кватернионом, повернуть вокруг одной из осей. Для этого нахожу этот радиус-вектор, совпадающий с осью подвижной СК, строю по нему кватернион поворота, и умножаю на него кватернион подвижной СК. Может я все делаю через сложно ?
|
|
|
|
|
Feb 16 2014, 10:16
|
Знающий
   
Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515

|
Цитата(alexPec @ Feb 16 2014, 11:40)  Думал раз уж есть кватернион, повернуть на него вектор проще чем строить матрицу поворота, а потом поворачивать.
Вообще надо подвижную систему координат, заданную кватернионом, повернуть вокруг одной из осей. Для этого нахожу этот радиус-вектор, совпадающий с осью подвижной СК, строю по нему кватернион поворота, и умножаю на него кватернион подвижной СК. Может я все делаю через сложно ? Да, можно и прямо по кватерниону поворачивать с двумя умножениями. Судя по тому, что вы приводите цифры вместо кода(которого тут должно быть всего три строчки), вы так и не сделали библиотеку стандартных операций с кватернионами и матрицами, поэтому запросто можете допустить какую-нибудь ошибку в кодировании.
|
|
|
|
|
Feb 16 2014, 10:59
|
Профессионал
    
Группа: Свой
Сообщений: 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}. Остальное вроде на рисунках понятно.
Эскизы прикрепленных изображений
|
|
|
|
|
Feb 16 2014, 12:45
|
Знающий
   
Группа: Участник
Сообщений: 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
|
|
|
|
|
Feb 16 2014, 17:57
|
Профессионал
    
Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968

|
Цитата(Timmy @ Feb 16 2014, 16:45)  Up: А судя по тому, что кватернион поворота не содержит при этом нулевой координаты, он вычислялся вовсе не по углам Эйлера, а как-то иначе. А с чего это он должен содержать нулевую координату??? Вы бы не вводили в заблуждение, поверните СК по ДВУМ углам Эйлера (рисунок). А теперь попробуйте представить ось вращения, лежащую в одной из плоскостей базовой СК, поворотом вокруг которой можно получить подвижную СК, повернутую на 2 угла Эйлера. У меня не получилось. Подскажите если знаете. Тему закрываю.
Эскизы прикрепленных изображений
|
|
|
|
|
Feb 17 2014, 10:37
|
Знающий
   
Группа: Участник
Сообщений: 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
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|