2014 dxdy logo

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

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




 
 Вращение в пространстве
Сообщение08.06.2011, 02:39 
Задачу нужно решить в общем виде, но об этом после. Для наглядности простой пример.

Есть диагональ куба - нижняя точка A(x1, y1, z1) и верхняя точка B(x2, y2, z1).

В точку С, являющейся центром этой диагонали помещаем отрезок L, который произвольно ориентирован.

Задача состоит в том, чтобы набором поворотов (двумя ? ) так повернуть этот отрезок, что он совпал с диагональю куба.

Основная проблема на какие углы поворачивать, сколько раз относительно какой оси, и в какой последовательности.

Вначале думал, что нужно найти угол между векторами - http://mathserfer.com/math/task.php?tname=vect_angle

но кажется это не то, что нужно ...

О! тут - post221452.html?hilit=%D0%B2%D1%80%D0%B0%D1%89%D0%B5%D0%BD%D0%B8%D0%B5#p221452

обсуждали что-то близкое, только ужасно сложно :) мне бы разжевать ...

<цитату пришлось удалить, иначе не мог отредактировать сообщение по просьбе модераторов>

Но как в моем случае найти угол $\psi$ ?

 
 
 
 Re: Вращение в пространстве
Сообщение08.06.2011, 04:44 
Цитата:
В точку С помещаем отрезок
расшифруйте.

А так в принципе ни чего страшного - можно и одним поворотом два вектора совместить (куб вроде и ни причем тут) - вопрос разрешено ли вращение вокруг оси перпендикулярной плоскости этих двух векторов?

 
 
 
 Re: Вращение в пространстве
Сообщение08.06.2011, 04:51 
"В точку С помещаем отрезок"

отрезок имеет центр в точке D, точку С совмещаем с точкой D

Да куб не причем, просто казалось что так проще думать ...

Вращать можно как угодно, только выразить это желательно матрицей поворотов.

Но как это сделать ?

Хотя, желательно разложить на вращения вокруг осей Ox, Oy или Oz. Иначе нужно как-то выражать перпендикулярную плоскость через матрицу поворотов.

-- Ср июн 08, 2011 06:11:53 --

Переформулируем задачу точнее.

Есть два вектора один произвольный, второй лежит на оси Ox. Они совмещены центрами. Задача найти матрицу поворотов, которая совмещала бы эти два вектора.

 
 
 
 Re: Вращение в пространстве
Сообщение08.06.2011, 07:10 
Правильно Вы начали рассуждение - осталось немного довести до конца формулы - и потом протестировать их на конкретных примерах. Вспомните про переход к сферической системе координат - как там углы вычисляются?

Но я бы так задачу ставил - есть два единичных вектора в пространстве с координатами $(x_1,y_1,z_1)(x_2,y_2,z_2)$, выходящие из начала координат - подобрать комбинацию поворотов вокруг координатных осей, обеспечивающую перевод второго вектора в первый.

Несколько ссылок - может понадобятся
http://mathworld.wolfram.com/RotationFormula.html
http://mathworld.wolfram.com/RotationMatrix.html
http://mathworld.wolfram.com/EulerAngles.html
http://mathworld.wolfram.com/RodriguesR ... rmula.html

 
 
 
 Re: Вращение в пространстве
Сообщение08.06.2011, 08:07 
Аватара пользователя
Ось поворота даётся векторным произведением наших векторов, угол - скалярным. Матрицу поворота на произвольный угол вокруг произвольной оси надо один раз сесть и выписать. Или вон по четвёртой ссылке есть. Всё.

 
 
 
 Re: Вращение в пространстве
Сообщение08.06.2011, 09:33 
Аватара пользователя
tac в сообщении #455499 писал(а):
Но как в моем случае найти угол psi ?

Здесь рассказано: $\text{psi}=\psi$.

 
 
 
 Re: Вращение в пространстве
Сообщение08.06.2011, 15:54 
Ну, что то не клеится. Где ошибка ?

Первый вектор - это ось Ox - т.е. А(1, 0, 0).
второй вектор задается двумя точками b1(0, 0, 0) и b2 (2, 2, 2), итого сам вектор вроде B(2,2,2)

Угол между векторами 54.73 градусов (в радианах 0.955) согласно http://www.reshalki.ru/index.php/reshalki/141

Векторное произведение w(0, -2, 2) согласно http://www.reshalki.ru/index.php/reshalki/138

Подставляем это в матрицу поворотов http://mathworld.wolfram.com/RodriguesR ... rmula.html

И мимо ... а я ожидаю, что первый вектор (ось Ox) повернется так, чтобы пройти через две точки b1(0, 0, 0) и b2 (2, 2, 2)

 
 
 
 Re: Вращение в пространстве
Сообщение08.06.2011, 16:01 
Аватара пользователя
В какую сторону крутили? Попробуйте в другую.

 
 
 
 Re: Вращение в пространстве
Сообщение08.06.2011, 16:04 
ИСН в сообщении #455697 писал(а):
В какую сторону крутили? Попробуйте в другую.


Правильно я понимаю, что для этого нужно угол в радианах умножить на -1 ? тогда пробовал, тоже плохо.

Может векторное произведении нужно как-то нормализовать ?


В тоже время другим способом, подобрал углы и вроде что-то похожее получилось

neM3 rotY; rotY = Y_rot_rad((PI/5)*-1); // поворот на PI/5 вокруг y
neM3 rotZ; rotZ = Z_rot_rad(PI/4); // и поворот PI/4 вокруг z

Bones[i].Body->SetRotation(rotZ*rotY);

хотя углы странные (мне казалось, что диагональ куба по отношению к оси Х, находится поворотом дважды по 45 градусов), да и в общем виде эти углы найти не знаю как ...

 
 
 
 Re: Вращение в пространстве
Сообщение08.06.2011, 17:30 
"Первый вектор - это ось Ox - т.е. А(1, 0, 0)."

Точнее задается тоже двумя точками a1(0,1,1) и a2(1,1,1) (центр диагонали)

 
 
 
 Re: Вращение в пространстве
Сообщение08.06.2011, 17:34 
Аватара пользователя
tac в сообщении #455699 писал(а):
Может векторное произведении нужно как-то нормализовать ?

Вообще-то да, нужно. К единичной длине.

 
 
 
 Re: Вращение в пространстве
Сообщение08.06.2011, 19:54 
ИСН в сообщении #455741 писал(а):
tac в сообщении #455699 писал(а):
Может векторное произведении нужно как-то нормализовать ?

Вообще-то да, нужно. К единичной длине.


И как это делается ? Я так понимаю, нужно найти длину вектора, а дальше что ?

а вроде нашел http://www.gamedev.ru/code/terms/Normalization

 
 
 
 Re: Вращение в пространстве
Сообщение08.06.2011, 19:56 
Аватара пользователя
А дальше поделить вектор на неё.

 
 
 
 Re: Вращение в пространстве
Сообщение08.06.2011, 20:15 
Большое спасибо всем, после нормализации все сошлось и получилось !! Ура :)

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


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