본문 바로가기

Graphics Note

[Mathematics] rotate model using quaternion

회전에 사원수를 사용하기 위해서 먼저 회전하려는 정점을 사원수의 형태로 표현한다. 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