LINUX.ORG.RU

Углы вращения


0

0

[опять вопрос никак к линуксу не относящийся, извините]

дано: тело из трех точек [A1,B1,C1] должно быть перенесенно в пространстве так, что-бы их координаты стали [A2,B2,C2]. Нужно найти вектор перемещения (dx,dy,dz) -(легко) и углы вращения вокруг осей X,Y,Z (в этом порядке).

Когда-то на этом форуме мне подсказали как найти ось и угол вращения вокруг неё, имея эти данные, можно ли получить выше указанные углы?

Спасибо

★★

Дано [A1,B1,C1], что в матричном виде можно записать как
| x_a y_a z_a |
A = | x_b y_b z_b |
| x_c y_c z_c |
тогда домножение справа на обратную матрицу A^-1 переведет треугольник
(положит его или исказит пространство так, что) в точки
1 0 0
0 1 0
0 0 1
А, дальнейшее домножение на матрицу
| x_a2 y_a2 z_a2 |
B = | x_b2 y_b2 z_b2 |
| x_c2 y_c2 z_c2 |
Переведет треугольник (или точки на осях ) в необходимые [A2,B2,C2].

По другому - результирующая матрица преобразований M = A^-1 * B.


PS. Если для OpenGL то удобно использовать glMultMatrix

PPS. Если все таки надо найти смещение и углы - придется анализировать
матрицу М(составлять уравнения.... в общем если надо обращайся)

PPPS. Все из расчета на общий случай.

salseeg
()
Ответ на: комментарий от salseeg

Во первых спасибо.
это, как я понимаю относится к вращениу без перемещения (если не так, поправте, пожалуйста).

Матрица вращения имеет вид:
|m01 m02 m03|
M= |m11 m12 m13|
|m21 m22 m23|
где
m01=cos(z)*cos(y); m03=sin(y); m33=cos(y)*cos(z)
(x,y,z углы вращения вокруг соответсвующих осей.)

а от туда просто.
У меня эта теория не сxодится с простыми примерами. Ткните пожалуйста носом в ошибки.
К стати, достаточно ли делать простые asin/acos(angle) (в С++), или нужно есче что-то иметь в виду? (другими словами: как знать к какой четверти относятся углы?)
PS: openGL'ом не пользуюсь

Спасибо

phrm ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.