2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 сложение двух вращений в 3-мерном пространстве
Сообщение26.03.2012, 17:32 


15/04/10
985
г.Москва
Теор. механика учит что всякая совокупность поворотов может быть сведена к 1 повороту относительно некоторой оси вращения. При этом могут использоваться разные координаты и оси поворотов.Как вычислить ось вращения аналитически (с применением Матлаб)?
Пусть вращение задано 3 углами поворотов $\varphi_x,\varphi_y,\varphi_z$относительно координатных осей Ox,Oy,Oz
1 способ (теор.мех) приняв условно что все повороты прошли за время=1с строим вектор угловой скорости $(w_x,w_y,w_z)$ такой что
$w_x=\varphi_x,w_y=\varphi_y,w_z=\varphi_z $ -он и будет мгновенной осью вращения или осью результирующего поворота.
2 способ строим матрицы поворотов относительно координатных осей
Ax=$\begin{bmatrix}1 & 0 & 0 \\0 & cos(\varphi_x) & -sin(\varphi_x) \\0 & sin(\varphi_x) & cos(\varphi_x)\end{bmatrix}$ Az=$\begin{bmatrix}cos(\varphi_z) & -sin(\varphi_z) & 0 \\
sin(\varphi_z) & cos(\varphi_z) & 0 \\0 & 0 & 1 \end{bmatrix}$
перемножаем (для простоты на примере 2 а не 3-х вращений) $K1=Ax*Az;   K2=Az*Ax$
В общем случае умножение матриц некоммутативно и матрицы K1 и K2 различны.
Ось поворота находим как собственный вектор соответствующий собственному значению $\lambda=1$; В общем случае для 2 разных матриц K1 и K2 получаются как показали расчеты 2 равных собственных вектора $v_1 ,  v_2$.но они не совпадают с вектором, полученным 1 способом.
Какой из способов правилен? В чем ошибка рассуждений?
Можно ли так представить ответ на это что вообще говоря поворот сначала на $\varphi_x$ затем на $\varphi_z$ это не то чем если бы скажем углы поворота разбили на равные части $d\varphi_x, d\varphi_z$ и делали повторения пар поворотов сначала на $d\varphi_x$ потом на $d\varphi_z$

 Профиль  
                  
 
 Re: сложение двух вращений в 3-мерном пространстве
Сообщение28.03.2012, 05:16 


15/04/10
985
г.Москва
Ну в общем все-таки разобравшись лучше можно сказать все таки что во всех 3 разобранных случаях оси поворотов будут разные. В 1 способе тело имея 2 составляющих угловой скорости участвует в каждом бесконечно малом интервале $dt$ в композиции поворотов $d\varphi_x,d\varphi_z$характеризуемого матрицей $dK_1$ повторение такой пары на каждом последующем интервале означает возведение этой матрицы в степень т.е $K_1(\w_x,w_z)=dK_1_N$ но все степени этой матрицы имеют одинаковый собств вектор для $\lambda=1$ т.е одинаковую ось вращения с координатами приведенными выше.
Во 2 и 3 случаях результат разный. Вроде есть еще способ сложения не угловых скоростей а именно конечных поворотов с помощью кватернионов. Но он мало используется

 Профиль  
                  
 
 Re: сложение двух вращений в 3-мерном пространстве
Сообщение28.03.2012, 06:30 


15/04/10
985
г.Москва
В процессе написания поста убедился в собственном невежестве. Этот вопрос интересовал механику ещё в середине 20 века. Была создана теория винтов. Доступна книга Димментберг. Теория винтов и ее применения, 1965 г. Там все рассказано гораздо нагляднее чем с применением кватернионов, хотя речь - об одном и том же!!! Кстати Димментберг вроде работал в ИМАШ АН СССР как и я. Правда я был тогда молодой и зеленый

 Профиль  
                  
 
 Re: сложение двух вращений в 3-мерном пространстве
Сообщение28.03.2012, 16:38 
Заслуженный участник
Аватара пользователя


30/01/06
72407
eugrita в сообщении #552366 писал(а):
Теор. механика учит что всякая совокупность поворотов может быть сведена к 1 повороту относительно некоторой оси вращения.

Это не теоретическая механика, а математическая теория групп учит.

eugrita в сообщении #552366 писал(а):
Какой из способов правилен? В чем ошибка рассуждений?

Оба правильны. Ошибка в том, что вы не довели до конца сравнение результатов. Результаты будут одни и те же, в случае, когда ответ однозначный. Внимание: он не всегда однозначный! Бывают такие повороты, которые можно осуществить по-разному.

 Профиль  
                  
 
 Re: сложение двух вращений в 3-мерном пространстве
Сообщение17.02.2014, 12:38 


17/02/14
5
Будьте добры развеять мои сомнения:) у меня следующая ситуация:

Предыстория:
Я пишу 3D игру и там соответственно нужно производить поворот тела в пространстве. нужно делать 2 поворота: по горизонтали и по вертикали. Вот так должно быть Изображение, а сейчас у меня происходит вот такИзображение т.е. вращение происходит по углам Эйлера, а не так как я хочу.
Это происходит потому что я произвожу 2 поворота

Код
Matrix.rotateM(mMVPMatrix, 0, yAngle, 0, 1, 0);
Matrix.rotateM(mMVPMatrix, 0, xAngle, 1, 0, 0);
Это код на java и opengl,но это не суть на чем написано суть в том что я сначала поворачиваю на угол yAngle вокруг оси {0 1 0} а потом вокруг на угол xAngle вокруг оси { 1 0 0}

Решение:
Как выход надо найти ОДИН поворот( угол=NEW_ANGLE а ось {X, Y, Z} ) заменяющий эти два и произвести всего одну операцию
Код
Matrix.rotateM(mMVPMatrix, 0, NEW_ANGLE, X, Y, Z);


И меня мучает вопрос не будет ли умножение матриц этих поворотов опять поворотом на эйлеровы координаты а не то что мне нужно ? И как сделать правильно?

 Профиль  
                  
 
 Re: сложение двух вращений в 3-мерном пространстве
Сообщение17.02.2014, 13:37 
Аватара пользователя


07/01/13
261
NJ

(Оффтоп)

Поверните матрицу еще и на необходимый угол по z.

ps. Можно свести все три поворота в один, но тогда Вам придется сначала повернуть необходимым образом СК, в которой нужный результат достигается одним поворотом вокруг заданной оси. Гораздо проще вычислить одну матрицу трансформации (те же три вызова rotateM) и умножать на нее координаты вращаемых объектов по мере необходимости (что-то типа Matrix.multiplyMM).

pps. А вообще тут наказывают за захват темы.

 Профиль  
                  
 
 Re: сложение двух вращений в 3-мерном пространстве
Сообщение17.02.2014, 13:54 


17/02/14
5
Извините не знал про "захваты темы" просто хотел чтобы людикоторые совсем в теме мне подсказали.

Я правильно понял, что 1) если умножить координаты вращаемых объектов 2 раза с помощью
Matrix.rotateM(mMVPMatrix, 0, yAngle, 0, 1, 0);
Matrix.rotateM(mMVPMatrix, 0, xAngle, 1, 0, 0);
это не тоже самое что вычислить произведение матриц поворота и потом это произведение применить в координатам объекта?

 Профиль  
                  
 
 Re: сложение двух вращений в 3-мерном пространстве
Сообщение17.02.2014, 14:01 
Заслуженный участник
Аватара пользователя


30/01/06
72407
rurik в сообщении #827660 писал(а):
Я правильно понял, что 1) если умножить координаты вращаемых объектов 2 раза с помощью
Matrix.rotateM(mMVPMatrix, 0, yAngle, 0, 1, 0);
Matrix.rotateM(mMVPMatrix, 0, xAngle, 1, 0, 0);
это не тоже самое что вычислить произведение матриц поворота и потом это произведение применить в координатам объекта?

Нет, это то же самое. Если заданы матрицы $M_1,M_2$ и вектор (то есть, точка в пространстве) $v,$ то
$M_1(M_2 v)=(M_1 M_2)v.$

Впрочем, ваши конкретные функции Matrix.rotateM(mMVPMatrix, 0, yAngle, 0, 1, 0); нам тут неизвестны, и что они означают, и что означают их параметры, - тоже.

 Профиль  
                  
 
 Re: сложение двух вращений в 3-мерном пространстве
Сообщение17.02.2014, 15:23 


17/02/14
5
Проясните пожалуйста ситуацию, как мне найти результирующий поворот и результирующую ось вращения? Куб все время вращается вокруг центральной точки.

 Профиль  
                  
 
 Re: сложение двух вращений в 3-мерном пространстве
Сообщение17.02.2014, 15:47 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Удобно вместо того, чтобы искать результирующую ось вращения, так и рассматривать результирующий поворот как матрицу.

 Профиль  
                  
 
 Re: сложение двух вращений в 3-мерном пространстве
Сообщение17.02.2014, 16:02 


17/02/14
5
нет, что удобнее хранить в матрице поворота я понял. просто мне кажется что это все равно все те же повороты на углы эйлера, а не поворот вокруг оси y и потом поворот вокруг оси х основной С.К. а С.К. куба

 Профиль  
                  
 
 Re: сложение двух вращений в 3-мерном пространстве
Сообщение17.02.2014, 17:22 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Все повороты на углы Эйлера - в итоге дают матрицу.
Все остальные повороты - в итоге дают матрицу.
По матрице вы не сможете определить, как именно она была получена. Любая матрица $3\times 3$ со свойствами $M^{\mathrm{T}}M=1,$ $\det M=1$ задаёт поворот.

Если вы хотите повернуть куб вокруг оси $y,$ а потом вокруг оси $x,$ в неподвижной системе координат, то это то же самое, как если повернуть куб вокруг оси $x,$ а потом вокруг оси $y,$ в поворачивающейся системе координат. Логично? Это задаётся порядком умножения матриц $M_x M_y.$ Если вы возьмёте произведение в другом порядке, $M_y M_x,$ то поступите наоборот: это будет в неподвижной системе координат сначала вокруг $x,$ а потом вокруг $y,$ или что то же самое, в поворачивающейся системе координат сначала вокруг $y,$ а потом вокруг $x.$ Если я не напутал. Впрочем, если я напутал, вы моментально увидите это, поэкспериментировав, и будете знать, что нужно просто поменять порядок матриц.

 Профиль  
                  
 
 Re: сложение двух вращений в 3-мерном пространстве
Сообщение17.02.2014, 18:02 


17/02/14
5
Я правильно понял, что для того чтобы повернуть куб сначала на угол А относительно оси Y неподвижной с.к. , а потом на угол B относительно оси X неподвижной с.к. надо
1) повернуть куб на угол B относительно оси X неподвижной с.к.
2)повернуть куб на угол А относительно оси Y ПОдвижной с.к.
так?

 Профиль  
                  
 
 Re: сложение двух вращений в 3-мерном пространстве
Сообщение17.02.2014, 18:59 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Да, но зачем? То же самое вы можете сделать, просто напрямую
    rurik в сообщении #827750 писал(а):
    повернув куб сначала на угол А относительно оси Y неподвижной с.к. , а потом на угол B относительно оси X неподвижной с.к.

Я просто указал на то, что результаты этих двух процедур одинаковы.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Модераторы: photon, profrotter, Парджеттер, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group