회전에 사원수를 사용하기 위해서 먼저 회전하려는 정점을 사원수의 형태로 표현한다. 3차원을 표현하기 위해서 사원수의 벡터 기저면 충분하기 때문에 순수사원수의 형태로써 표현하며, 이는 위치벡터를 나타내게된다.
[math!]\mathbf{p} = [0+x\mathbf{i} + y\mathbf{j} + z\mathbf{k}][/math!]
어떠한 한 축을 단위 사원수 [math]\hat{\mathbf{u}} = [x_u \mathbf{i} + y_u\mathbf{j} + z_u\mathbf{k}][/math] 로 나타내고 이 축에 대한 회전각을 [math]\theta[/math]라고 한다면, 회전변환 사원수 [math]\mathbf{q}는
[math!]\mathbf{q} = [\cos(\theta/2) + \sin(\theta/2) \mathbf{u}][/math!]
라고 한다.
그리고 이의 inverse를 구하면
[math!]\mathbf{q}^{-1} = \frac{[\cos(\theta/2) - \sin(\theta/2) \mathbf{u}]}{|\mathbf{q}|^2} = \frac{[\cos(\theta/2) - \sin(\theta/2) \mathbf{u}]}{\cos(\theta/2)^2 + \sin(\theta/2)^2} = [\cos(\theta/2) - \sin(\theta/2) \mathbf{u}][/math!]
이다.
이 회전변환 사원수를 이용하여 정점을 회전한 결과는
[math!]\mathbf{p}' = \mathbf{q}\mathbf{p}\mathbf{q}^{-1}[/math!]
이라 한다. (rotation quaternion details에 이에 대하여 설명하였다.)
이제 모델의 회전을 x축에 대한 회전과 y축에 대한 회전 그리고 z축에 대한 회전으로 나눠서 생각해 보자.
x축에 대한 회전을 pitch 라 부르고 y축에 대한 회전을 yaw, z축에 대한 회전을 roll이라 부른다.
오일러 회전과 다르게 사원수 회전은 회전변환시 세 개의 축을 동시에 고려하여 회전하며 (그래서 짐벌락(gimbal lock)의 문제가 일어나지 않는다) 다음의 순서로 곱하여 하나의 회전변환 사원수로 표현할 수 있다.
[math!]\mathbf{q} = \mathbf{q}_{yaw} \mathbf{q}_{pitch} \mathbf{q}_{roll} = [s + x\mathbf{i} + y\mathbf{j}+ z\mathbf{k}] [/math!]
여기서,
[math!]\begin{aligned} s &= \cos(\theta_{yaw}/2)\cos(\theta_{pitch}/2)\cos(\theta_{roll}/2) + \sin(\theta_{yaw}/2)\sin(\theta_{pitch}/2)\sin(\theta_{roll}/2) \\ x &= \cos(\theta_{yaw}/2)\sin(\theta_{pitch}/2)\cos(\theta_{roll}/2) + \sin(\theta_{yaw}/2)\cos(\theta_{pitch}/2)\sin(\theta_{roll}/2) \\ y &= \sin(\theta_{yaw}/2)\cos(\theta_{pitch}/2)\cos(\theta_{roll}/2) - \cos(\theta_{yaw}/2)\sin(\theta_{pitch}/2)\sin(\theta_{roll}/2) \\ z &= \cos(\theta_{yaw}/2)\cos(\theta_{pitch}/2)\sin(\theta_{roll}/2) - \sin(\theta_{yaw}/2)\sin(\theta_{pitch}/2)\cos(\theta_{roll}/2) \\ \end{aligned}[/math!]
이다. (괜히 손수 계산해본다고 하다가 눈알 빠지는 줄 알았다.)
짐벌락으로부터 자유를 준 사원수에게 경의를 표하며 글을 마치겠다.
참고 : Mathematics for computer graphics 3rd / John Vince
'Graphics Note' 카테고리의 다른 글
외곽선 검출 (0) | 2013.08.27 |
---|---|
perspective projection (3) | 2013.07.19 |
[Mathematics] quaternion(사원수) (1) | 2013.07.10 |
[Mathematics] matrices for transformation (0) | 2013.07.09 |
[Mathematics] complex number (5) | 2013.07.01 |