** 간단하고 안전한 방향전환 행렬 구하기 **
copyrightⓒ Gamza

 


두개의 단위 방향벡터가 주어지고 한 벡터를 다른 벡터로 회전하는 행렬을 구하는 문제는 게임에 종종 등장하곤 합니다.
그런데 문제는 이것이 참 구하기도 까다롭고 수치적으로 불안정 해지는등...여러모로 사용하기가 까다롭다는 것입니다.
만약 입력이 달랑 단위 방향벡터 두개가 아니라 두개의 완전한 좌표축으로 주어진다면 문제는 정말로 간단해집니다.

이 글은 두개의 좌표축이 주어지고 한 좌표축을 다른 좌표축으로 변환하는 회전행렬을 보.여.드리 위한 글입니다.

문 제
세개의 단위벡터로 표현되는 좌표축이 두개 있다.
A : Vside, Vup, Vdir
B : Vside, Vup, Vdir
Vsideside vector(일반적으로 x축)
Vupup vector(일반적으로 y축)
Vdirdirection vector(일반적으로 z축)
좌표축 A를 B가되도록 회전시키는 회전 행렬을 구하라. 
정 답
구하고자 하는 회전 행렬을 M 이라 하면,
B.Vside=A.Vsidex M
B.Vup=A.Vupx M
B.Vdir=A.Vdirx M
행렬로 간단히 표현하면...
B = A x M
A,B: 각행이 Vside, Vup, Vdir인 3x3행렬
M을 구하면...
M = inverse(A) x B = transpos(A) x B

뭐...계산이랄것이 하나도 없죠....그래서 보여드린다고 했던겁니다...ㅡ.ㅡ;;;
너무 간단해서 허탈하기까지...
어쨌든 입력이 달랑 단위 방향벡터 두개인 경우....Up vector만 적당히 잡아줄수 있으면, 이 방법을 써서 간단하고도 안전하게 완벽한 회전 행렬을 구할수 있습니다.

반응형

'수학 (Mathematics) > 3D수학' 카테고리의 다른 글

벡터의 내적과 외적  (0) 2012.11.02
한 축에 대한 기저 생성  (0) 2012.11.02
점과 직선/반직선/선분과의 거리  (0) 2012.11.02
선형변환 (Linear Transformations)  (0) 2012.11.02
동차 좌표  (0) 2012.11.02

+ Recent posts