Аффинные матрицы вращения

Я пишу класс Matrix, который имеет статический RotationX() RotationY() а также RotationZ() методы в C ++. Если я умножу матрицы вместе перед тем, как умножить на вектор, я получу другие результаты, чем если бы я умножил матрицы по отдельности на вектор.

Этот код

Vec4 result1 { 1, 1, 1, 1 };
result1 = Matrix::RotationX(ToRadians(-90)) * result1;
result1 = Matrix::RotationY(ToRadians(90)) * result1;
result1 = Matrix::RotationZ(ToRadians(90)) * result1;
// result1 => { -1, -1, -1, 1 }

дает другие результаты, чем этот код

Vec4 result2 { 1, 1, 1, 1 };
auto rotation = Matrix::RotationX(ToRadians(-90)) *
Matrix::RotationY(ToRadians(90)) *
Matrix::RotationZ(ToRadians(90));
result2 = rotation * result2;
// result2 => { 1, 1, -1, 1 }

В чем здесь проблема? Я могу предоставить свои реализации функции поворота, но я хотел убедиться, что это не концептуальная проблема с аффинными преобразованиями, прежде чем публиковать код.

0

Решение

Ваш первый пример соответствует обратному порядку умножения матриц. Для сравнения:

Z * (Y * (X * V))
((X * Y) * Z) * V

Но умножение матриц не является коммутативным!

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector