2014 dxdy logo

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

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




 
 сложение двух вращений в 3-мерном пространстве
Сообщение26.03.2012, 17:32 
Теор. механика учит что всякая совокупность поворотов может быть сведена к 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 
Ну в общем все-таки разобравшись лучше можно сказать все таки что во всех 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 
В процессе написания поста убедился в собственном невежестве. Этот вопрос интересовал механику ещё в середине 20 века. Была создана теория винтов. Доступна книга Димментберг. Теория винтов и ее применения, 1965 г. Там все рассказано гораздо нагляднее чем с применением кватернионов, хотя речь - об одном и том же!!! Кстати Димментберг вроде работал в ИМАШ АН СССР как и я. Правда я был тогда молодой и зеленый

 
 
 
 Re: сложение двух вращений в 3-мерном пространстве
Сообщение28.03.2012, 16:38 
Аватара пользователя
eugrita в сообщении #552366 писал(а):
Теор. механика учит что всякая совокупность поворотов может быть сведена к 1 повороту относительно некоторой оси вращения.

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

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

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

 
 
 
 Re: сложение двух вращений в 3-мерном пространстве
Сообщение17.02.2014, 12:38 
Будьте добры развеять мои сомнения:) у меня следующая ситуация:

Предыстория:
Я пишу 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 
Аватара пользователя

(Оффтоп)

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

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

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

 
 
 
 Re: сложение двух вращений в 3-мерном пространстве
Сообщение17.02.2014, 13:54 
Извините не знал про "захваты темы" просто хотел чтобы людикоторые совсем в теме мне подсказали.

Я правильно понял, что 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 
Аватара пользователя
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 
Проясните пожалуйста ситуацию, как мне найти результирующий поворот и результирующую ось вращения? Куб все время вращается вокруг центральной точки.

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

 
 
 
 Re: сложение двух вращений в 3-мерном пространстве
Сообщение17.02.2014, 16:02 
нет, что удобнее хранить в матрице поворота я понял. просто мне кажется что это все равно все те же повороты на углы эйлера, а не поворот вокруг оси y и потом поворот вокруг оси х основной С.К. а С.К. куба

 
 
 
 Re: сложение двух вращений в 3-мерном пространстве
Сообщение17.02.2014, 17:22 
Аватара пользователя
Все повороты на углы Эйлера - в итоге дают матрицу.
Все остальные повороты - в итоге дают матрицу.
По матрице вы не сможете определить, как именно она была получена. Любая матрица $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 
Я правильно понял, что для того чтобы повернуть куб сначала на угол А относительно оси Y неподвижной с.к. , а потом на угол B относительно оси X неподвижной с.к. надо
1) повернуть куб на угол B относительно оси X неподвижной с.к.
2)повернуть куб на угол А относительно оси Y ПОдвижной с.к.
так?

 
 
 
 Re: сложение двух вращений в 3-мерном пространстве
Сообщение17.02.2014, 18:59 
Аватара пользователя
Да, но зачем? То же самое вы можете сделать, просто напрямую
    rurik в сообщении #827750 писал(а):
    повернув куб сначала на угол А относительно оси Y неподвижной с.к. , а потом на угол B относительно оси X неподвижной с.к.

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

 
 
 [ Сообщений: 14 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group