본문 바로가기

수학/수학 논문 정리

Quaternion으로 $\mathbb{E}^3$ 공간에서 회전 예시

앞의 포스팅에서 Quaternion의 기본 이론을 살펴보았다.

실제로는 어떻게 $\mathbb{E}^3$에서의 벡터를 어떻게 계산해 회전시키는지 확인해보고자 한다.

계산식은 앞에서 본 것 처럼

$$ \mathbf{q x q}^{-1}=\mathbf{q x \overline{q}} $$

이고, $\mathbf{q}$는 $\mathbf{q} \overline{\mathbf{q}} = 1$을 만족하는 단위사원수이다. 그러므로

$$\mathbf{q}= \cos \theta + \mathbf{u} \sin \theta$$
라고 쓸 수 있었는데
$\mathbf{u}$는 회전축
($\mathbf{u}=q_1 \mathbf{i}+q_2 \mathbf{j}+q_3 \mathbf{k}, \; q_1 ^2 +q_2 ^2+q_3 ^2 =1 $로 표현되는 순단위사원수)
$2 \theta$가 회전각이었다.

따라서 축이 되는 벡터 $\vec{u}$를 길이가 1이 되도록 잡고,
$2{\theta}$를 회전하고 싶은 각도로 잡으면 된다.(회전방향은 반시계방향이다.)

$$\mathbf{u}= \vec{u} = (q_1, q_2, q_3), \; q_1 ^2 +q_2 ^2+q_3 ^2 =1 $$

이때 길이가 1 아니더라도 축으로 만들고 싶은 임의의 벡터 $$\vec{a} = (a, b, c) $$에 대해

$$\frac{\vec{a}}{|\vec{a}|}=\vec{u}, \; |\vec{a}|=\sqrt{a^2+b^2+c^2}$$

으로 놓으면 된다.*(아래 추가자료의 구면좌표계를 이용할 수도 있다.)

다음은 $ \mathbf{q^{-1}}$ 인데 $\mathbf{q}$가 단위사원수이기 때문에 켤레사원수랑 같다. 즉,
$$ \mathbf{q^{-1}} = \overline{\mathbf{q}} = \cos \theta - \vec{u} \sin \theta $$

이제 사원수 곱셈 $ \mathbf{q x} \overline{\mathbf{q}} $만 하면 된다.

이동시킬 좌표 $\mathbf{x} = (0, x_0, y_0, z_0) = \vec{x},$ 에
$\mathbf{q}= \cos \theta + \sin \theta \, \vec{u} $ 을 앞에 곱하면
(편의상 $\vec{u} \cdot \vec{x} = x_0 q_1 + y_0 q_2 +z_0 q_3 = k$ 라 하자.)

$$ \mathbf{q x}= \cos \theta \, \vec{x}+ \sin \theta \, \vec{u} \times \vec{x} $$

$ \overline{\mathbf{q}} = \cos \theta - \sin \theta \, \vec{u}$ 을 뒤에 곱하면
(앞의 포스트에서 상수항의 결과는 처음과 같으므로 계산할 필요없이 0이다.)

$$ \mathbf{q x} \overline{\mathbf{q}} = k \sin^2 \theta \, \vec{u} + \cos^2 \theta \, \vec{x} + \cos \theta \sin \theta \, \vec{u} \times \vec{x} - \sin \theta (\cos \theta \, \vec{x}+ \sin \theta \, \vec{u} \times \vec{x}) \times \vec{u} $$

편의상 $\vec{u} \times \vec{x} = \vec {v}$라 하고,
외적의 성질에 의해
$ \vec{u} \times \vec{x} = - \vec{x} \times \vec{u}$ 인 것과
$\vec{u} \cdot \vec{u}= 1$ 이므로 $(\vec{u} \times \vec{x}) \times \vec{u}= -(\vec{u} \cdot \vec{x})\vec{u} + ( \vec{u} \cdot \vec{u})\vec{x} = -k \vec{u} + \vec{x}$ 인 것을 이용하자.

위의 식을 정리하면,
$$ 2k \sin^2 \theta \, \vec{u} + ( \cos^2 \theta - \sin^2 \theta) \, \vec{x} + 2 \sin \theta \cos \theta \, \vec{v} $$

삼각함수의 덧셈정리를 사용하면 결과적으로

$$ \mathbf{q x} \overline{\mathbf{q}} = 2k \sin^2 \theta \, \vec{u} + \cos 2 \theta \, \vec{x} + \sin 2 \theta \, \vec{v} $$
이다. (단, $\vec{u} \times \vec{x} = \vec {v}$, $k = \vec{u} \cdot \vec{x}$)


예제: 점$(1,1,1)$을 축 $(0,0,1)$로 반시계방향으로 $90^\circ$만큼 회전시키기.

$\vec{x}=(1,1,1)$, $\vec{u}=(0,0,1)$, $\theta = 45^\circ$으로 두고 대입하면

$ k = \vec{u} \cdot \vec{x}= 1$
$ \vec{v} = \vec{u} \times \vec{x} = \begin{vmatrix}\mathbf{i}&\mathbf{j} &\mathbf{k} \\0 & 0 & 1 \\1 & 1 & 1 \end{vmatrix} = (-1, 1, 0) $
$\sin \theta = \frac{1}{\sqrt{2}}, \sin 2 \theta = 1, \cos \theta = 0$

$$ \mathbf{q x} \overline{\mathbf{q}} = (0,0,1)+ 0 \vec{x} + (-1, 1, 0) = (-1,1,1) $$


- 시각화 자료: 여기서 실제로 쿼터니언 회전이 무엇인지 관찰해보자.
쿼터니언 회전1
쿼터니언 회전2

- 이것을 이용하면 $\vec{u}$를 진행방향 벡터로 잡고 회전할 경우 오일러 회전에서 생기는 짐벌락 현상도 막고 매우 직관적으로 회전이 가능하다.

*추가자료: 구면좌표계를 이용한 단위벡터 설정

단위벡터로 원하는 축을 만들고 싶다면 삼각함수를 사용하여 다음처럼 설정할 수 있다. $xy$평면 위에서 각 $\theta$, $z$축과의 각$\phi$라고 하면

$$ \vec{u} = (\cos \theta \sin \phi, \sin \theta \sin \phi, \cos \phi) $$

이 된다. (이미지 참고)