2016-12-28 14 views
0

C++에서 정적 RotationX()RotationY()RotationZ() 메쏘드가있는 Matrix 클래스를 작성했습니다. 벡터에 곱하기 전에 행렬을 곱하면 벡터에 행렬을 개별적으로 곱한 것보다 다른 결과를 얻습니다.Affine 회전 행렬

이 코드

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 } 

여기에 문제가 무엇입니까 다른 결과를 얻을 수? 로테이션 함수 구현을 제공 할 수 있지만 코드를 게시하기 전에 이것이 아핀 변환의 개념적 문제가 아니 었는지 확인하고 싶습니다.

답변

2

첫 번째 예는 행렬 곱셈의 역순에 해당합니다. 비교 :

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

그러나 행렬 곱셈은 교환 가능하지 않습니다!

+0

내 행렬의 순서가 다르다는 것을 깨달았습니다. :) 감사합니다. – jefftime