회전변환에 행렬이 최선이 아닌 이유

  * 회전 변환에서는 피치, 요, 롤이 세가지 변수밖에 없는데, 이 것을 표현하기 위해 9개의 부동소수가 필요하다. 낭비다.

  * 벡터를 회전 변환하려면 행렬 곱셈을 해야하는데, 여기에는 3번의 내적 계산 즉 9번의 곱셈과 6번의 덧셈이 필요하다.

  * 두 회전 변환 사이의 주간 회전 변환을 구해야 할 때 행렬로는 중간 지점을 찾기가 힘들다.


1. 3D 회전 변환을 나타내는 단위 길이 사원수

 q = [qv qs] [asin(θ/2) cos(θ/2)]


2. 사원수 연산

 두 사원수가 있을 때 곱셈은 두 사원수의 회전을 합친 것이다.


 pq = [ (psqv + qspv + pv X qv) (psqs - pv*qv) ]


3. 결레와 역

 사원수의 역은 q^(-1) 이라고 쓰고 그 의미는 원래의 값과 곱하면 스칼라 값 1이 되는 사원수를 뜻한다.

 qq^(-1) = 0i + 0j + 0k +1

 켤레 사원수 = [ -qv qs ]

 사원수의 역 = 켤레 사원수 / 크기 절대값의 제곱


 사원수 곱셈에서

 (qp) 의 켤레 사원수는 반대 순서로 둘의 켤레사원수를 곱한것이며 사원수의 역도 반대 순서로 둘의 역을 곱한 것이다.


4. 사원수의 벡터를 이용한 회전

 벡터 v를 사원수로 바꿔쓰면 v = [ vx vy vz 0 ] 이다.

 이것을 회전한 결과는 v' = qvq^(-1) 단위길이라면 역대신 켤레가 들어가도 된다.

 

 회전을 여러번 할때의 사원수 계산은

 q3q2q1vq1^(-1)q2^(-1)q3^(-1)

 

5. 사원수의 계산으로 보간이 가능하다

하지만 회전에서 보간을 하려면 완전하지 선형보간 LERP를 써야하는데 구면 선형 보간 SLERP를 쓰기엔 너무 느리다.


 


'게임 엔진 아키텍처 > 4장 게임에 사용되는 수학' 카테고리의 다른 글

회전 변환 표현간 비교 / 기타 수학 개념  (0) 2016.05.26
행렬  (0) 2016.05.26
벡터  (0) 2016.05.25
posted by 알쿠미