LINUX.ORG.RU

Опять матрицы вращения


0

0


Помогите, пожалуйста, разобраться раз и на всегда:
Дано тело в пространстве, которое надо повернуть вокруг своего центра и подвинуть(dx, dy, dz). В используеммой библиотеке есть функция которое делает rigid body transformation (трансформирование твердого тела). Сама трансформация выражена матрицой 4 на 4. Мой план: вычисляем матрицы (4x4)
- m1 передвижения тела в точку [0;0;0]
- m_inv обратно из [0;0;0] в центр тела
- m2 вращение
- m3 передвижение (dx, dy, dz)
(почему именно так? просто для каждой такой операции уже есть функции).

Теперь двигаем тело в вершину координат, крутим, двигаем обратно, и двигаем есче чуть-чуть:
mTotal=m1*m2*m_inv*m3 ;
(оператор * - написан и соответсвует векторному перемножению матриц).
Прав ли я (скорее всего, что - нет, т.к. получаю какую-то херню), и если нет, то в чем заблуждаюсь?

★★

solved:
mTotal=m3*m_inv*m2*m1

phrm ★★
() автор топика

> и если нет, то в чем заблуждаюсь?

В принципе :-)

Тебе следует начать с того, что "положение тела" есть некоторая точка в ортонормированном базисе. Тогда перемещение тела есть НЕ УМНОЖЕНИЕ вектора на матрицу, зато суть есть СЛОЖЕНИЕ векторов (вектор перемещения + вектор координат тела).

Далее - тело у нас не материальная точка, а значит имеет другие точки. Тогда все точки тела отсчитываются от его центра. Тогда при повороте тела все точки (координаты которых относительно центра тела есть векторы :-) домножаются на матрицу поворота (которая состоит из синусов и косинусов углов поворота).

масштабиролвание - это домножение на матрицу, но на этот раз в ячейках матрицы располагаются коэффициенты сжатия.

no-dashi ★★★★★
()
Ответ на: комментарий от no-dashi

Прогнал ты - он же написал, что матрица 4х4 т.е. координаты - однородные (x y z 1) - так что любые масштабирования, перемещения, вращения, скосы и перспективы можно выразить через умножение на соотв. матрицу.

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