사원수를 쓰는 이유

x y z 축을 순서에 따라 회전시키게 되면 축이 겹치게 되는 현상(gimbal lock)이 생기기 때문

 

복소수와 사원수

특별한 사원수의 곱

사원수 곱셈은 교환법칙을 만족하지 않지만 결합법칙은 만족한다.

사원수 곱셈의 항등원 e = (0, 0, 0, 1)이다. (항등 사원수)

사원수 곱셈은 덧셈에 대한 분배법칙을 만족한다.

 

실수 s = (0, 0, 0, s)

벡터 u = (x, y, z, 0)

 

22.2.5 사원수의 켤레와 사원수의 크기

사원수 q = (q1, q2, q3, q4) = (u, q4)의 켤레를 q*로 표기한다.

q* = (-q1, -q2, -q3, q4) = (-u, q4)

 

켤레의 성질

1. (pq)* = q*p*

2. q와 q*를 더하면 실수가 된다. (0, 0, 0, 2q4)가 되므로

3. q와 q*의 곱은 사원수 크기의 제곱(실수)이다.

4. q q* = q* q = || q ||² = 사원수 q의 크기의 제곱

22.2.6 역 사원수

사원수 곱셈의 항등원 (0, 0, 0, 1)을 만드는 역 사원수

크기가 1인 단위사원수의 경우 역 사원수 =  켤레 사원수가 된다.

 

22.2.7 극형식

단위 사원수 q = (q1, q2, q3, q4) = (u, q4)에 대하여 ||u||² + q4² = 1 이다.

u와 같은 방향의 단위벡터를 n이라고 하면 u = sinθn 로 나타낼 수 있고, sin²θ n² + cos²θ = 1이기 때문에

q = (sinθn, cosθ)로 나타낼 수 있다.

 

θ 대신에 -θ를 대입할 경우 (n sin(-θ), cosθ) -> (-n sinθ, cosθ) = q *(켤레 사원수)

 

 

22.3 단위 사원수와 회전

회전 연산자

순사원수 p =(v, 0) (v = 3차원 점 또는 벡터)를 축 n에 대해 θ각도 만큼 회전시킨 사원수

 

q와 -q가 같은 결과를 반환하는데 이는 회전 방향의 차이이다.

 

회전행렬을 사원수 회전 연산자로 변환할 수 있고 사원수 회전 연산자를 회전행렬으로 변환할 수 있다.


22.4 사원수 보간

단위 사원수는 4차원 단위구 구면에 놓인 4차원 단위벡터이다.

 

b와 -b가 기하적으로는 같은 회전이지만, 4차원 단위구에서는 반대 방향을 뜻하고 

slerp(a, b, t)와 slerp(a, -b, t)는 짧은 호를 따라 보간될 것인지 긴 호를 따라 보간될 것인지를 결정한다.

||a - b||²와 ||a + b||² 중 ||a - b||²이 더 작은경우에는 a, b를 사용하는 것이 짧은 호를 따라 보간된다는 뜻이다.

a, -b를 사용하면 긴 호를 따라 보간된다.

 

연습문제

 

'읽은 책 > DirectX 12를 이용한 3D 게임 프로그래밍 입문' 카테고리의 다른 글

23. 캐릭터 애니메이션  (0) 2022.07.12
21. 주변광 차폐  (0) 2022.07.10
20. 그림자 매핑  (0) 2022.07.08
19. 법선 매핑  (0) 2022.07.04
18. 입방체 매핑  (0) 2022.07.02

+ Recent posts