사원수를 쓰는 이유
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 |