답변:
행렬 를 변환, 스케일링 및 회전과 같은 기본 변환으로 분해 할 수 있습니다 . 이 매트릭스가 주어지면 :
마지막 열 사용하여 검사하여 번역을 분해 할 수 있습니다 .
스케일링을 위해 행렬의 처음 세 열은 밑 (축)에 해당합니다. 이 벡터의 길이 / 규모, 즉베이스가 얼마나 많은지에 따라 스케일을 얻을 수 있습니다. 따라서 스케일은 여기서 :
이제 스케일에는 사용하여 제거 할 수있는 부분 행렬이 대응하는 스케일의 역수로 행렬을 곱하여 에 받기R S R
따라서 ( ) :
이것이 최종 회전 행렬입니다. 여러 가지 방법으로 추가로 분해 할 수 있습니다. 종료 시간이 길지만 회전 행렬 분해를 검색 할 수 있습니다 .
이 방법은 평행 이동, 스케일링 및 회전 형식의 동등한 값만 제공합니다 (원래 매트릭스는 다른 유형의 변환 결과 일 수 있음). 분해 된 각도를 추가로 사용하는 경우 회전 각도와 함께 부동 소수점 정밀도에 문제가있을 수 있으며 반올림 오류가 계산에 누적 될 수 있습니다. 매트릭스를 직접 구성하지 않은 경우에는 사용하지 마십시오.
행렬을 구성한 사람이고 변환, 스케일 및 회전을 개별적으로 그리고 독립적 으로 편집하고 표시 할 수 있도록 분해를 원한다면 , 의 구성 요소를 저장하는 것이 가장 깨끗한 이유 일 것입니다 변환 클래스 및 은 개별적으로 벡터 (회전의 쿼터니언 일 수 있음)입니다. 변환 매트릭스가 필요한 경우에만 이러한 컴포넌트에서 매트릭스를 구성하십시오 (일부 컴포넌트가 변경 될 때까지 매트릭스를 캐시 할 수 있음).