본문 바로가기

심화/기하(Geometry)

쿼터니언(Quaternion) 설명

쿼터니언은 복수 개념으로 확장 시킨 대수적 구조이다. (오일러 각에서 나오는) 각도와 회전 개념에 비해 덜 직관적이지만, 훨씬 효율적으로 계산할 수 있다.

 

1843년 수학자 윌리엄 해밀턴은 3차원 회전은 쿼터니언으로 부를 수 있는 복소수로 표현 가능함을 발견하였다

 

1. 쿼터니언 대수

쿼터니안은 4-튜플로 적을 수 있고, $q_i$는 실수, i, j, k는 허수 이다.

$$ q_0 + q_1i + q_2j + q_3k $$

 

또한, 허수 i, j, k는 아래 식을 만족한다. 아래 식과 같이 i, j, k는 교환 법칙이 성립하지 않는다.

쉽게 기억하기 위해서 아래와 같이 그림을 만들고 시계 방향은 +, 반 시계 방향은 -로 기억한다.

\begin{aligned}
&i^{2}=j^{2}=k^{2}=-1 \\
&i j=k, j i=-k \\
&j k=i, k j=-i \\
&k i=j, i k=-j
\end{aligned}

 

두개의 쿼터니언을 더하고 곱하는 공식은 아래와 같다.

 

\begin{aligned}
\left(q_{0}+\right.&\left.q_{1} i+q_{2} j+q_{3} k\right)+\left(p_{0}+p_{1} i+p_{2} j+p_{3} k\right) \\
=&\left(q_{0}+p_{0}\right)+\left(q_{1}+p_{1}\right) i+\left(q_{2}+p_{2}\right) j+\left(q_{3}+p_{3}\right) k \\ \\
\left(q_{0}+\right.&\left.q_{1} i+q_{2} j+q_{3} k\right)\left(p_{0}+p_{1} i+p_{2} j+p_{3} k\right) \\
=&\left(q_{0} p_{0}+q_{1} p_{1} i^{2}+q_{2} p_{2} j^{2}+q_{3} p_{3} k^{2}\right)+\\
&\left(q_{0} p_{1} i+q_{1} p_{0} i+q_{2} p_{3} j k+q_{3} p_{2} k j\right)+\\
&\left(q_{0} p_{2} j+q_{2} p_{0} j+q_{1} p_{3} i k+q_{3} p_{1} k i\right)+\\
&\left(q_{0} p_{3} k+q_{3} p_{0} k+q_{1} p_{2} i j+q_{2} p_{1} j i\right) \\
=&\left(q_{0} p_{0}-q_{1} p_{1}-q_{2} p_{2}-q_{3} p_{3}\right)+\\
&\left(q_{0} p_{1}+q_{1} p_{0}+q_{2} p_{3}-q_{3} p_{2}\right) i+\\
&\left(q_{0} p_{2}+q_{2} p_{0}-q_{1} p_{3}+q_{3} p_{1}\right) j+\\
&\left(q_{0} p_{3}+q_{3} p_{0}+q_{1} p_{2}-q_{2} p_{1}\right) k
\end{aligned}

 

(참고: https://github.com/cattaneod/CMRNet/blob/3359a2c85cbc7e270d499dd15b892f6bf058aac3/quaternion_distances.py#L12 )

2. 복소수의 켤레(Conjugate)와 절대 값

복소수는 필드(field)를 형성한다. 왜냐하면, 곱셈은 교환 법칙이 성립하며 0이 아닌 복소수는 역원(Inverse)을 가지고 있기 때문이다.

\begin{aligned}
(a+b i)(a-b i) &=a^{2}-b^{2} i^{2}=a^{2}+b^{2} \\ \\ 
\frac{(a+b i)(a-b i)}{a^{2}+b^{2}} &=1 \\ \\
(a+b i)^{-1} &=\frac{a-b i}{a^{2}+b^{2}} .
\end{aligned}

 

복소수 $z = a + bi$에 대해서 켤레는 $z^* = a - bi$ 이다. 그리고 Norm은 $|z| = \sqrt{a^2 + b^2}$ 이다. 역원은 다음과 같이 적을 수 있다.

$$ z^{-1} = {z* \over |z|^2} $$

 

3. 쿼터니안의 켤레(Conjugate)와 놈(Norm)

$ q = q_{0}+ q_{1} i+q_{2} j+q_{3} k $ 의 켤레는 $ q^* = q_{0} - q_{1} i - q_{2} j - q_{3} k $ 이고,

Norm은 다음과 같다. $ |q| = \sqrt{q_{0}^2+ q_{1}^2 +q_{2}^2+q_{3}^2 } $

 

모든 0이 아닌 쿼터니언은 역원을 가지고 있다. 다만, (복소수와는 다르게) 쿼터니안은 교환법칙이 성립하지 않기 때문에 필드(field)를 형성하지는 않는다.

 

4. 회전에서의 쿼터니언

3차원 공간상에서 벡터는 (실수가 없는, 허수만으로 이루어진) 쿼터니언으로 표현될 수 있다. $ q_A = 0+ xi+ yj+ zk $

회전은 놈(Norm) 값이 1인 쿼터니언 $q_R = q_{0}+ q_{1} i+q_{2} j+q_{3} k$로 표현될 수 있다($|q_R| = 1$)

A 좌표계에서 B좌표계로의 회전은 아래와 같이 표현할 수 있다.

$$ q_B = q_Rq_Aq^{*}_R$$

해당 계산 결과는 쿼터니언 $q_B$를 출력값으로 가지며 이는 $q_A$와 마찬가지로 3차원 상의 벡터이며 허수만으로 이루어진 쿼터니언이다. 쿼터니언으로 표현한 회전은 오일러 각도 표현법과는 다르게 회전 시 삼각함수 연산이 필요하지 않다. 덧셈, 곱셈만 연산이 사용된다(회전 연산의 쿼터니언 표현법 장점)

 

\begin{aligned}
q_{R} q_{A} q_{R}^{*}=&\left(q_{0}+q_{1} i+q_{2} j+q_{3} k\right)(x i+y j+z k)\left(q_{0}-q_{1} i-q_{2} j-q_{3} k\right) \\
=&\left(x\left(q_{0}^{2}+q_{1}^{2}-q_{2}^{2}-q_{3}^{2}\right)+2 y\left(q_{1} q_{2}-q_{0} q_{3}\right)+2 z\left(q_{0} q_{2}+q_{1} q_{3}\right)\right) i +\\
&\left(2 x\left(q_{0} q_{3}+q_{1} q_{2}\right)+y\left(q_{0}^{2}-q_{1}^{2}+q_{2}^{2}-q_{3}^{2}\right)+2 z\left(q_{2} q_{3}-q_{0} q_{1}\right)\right) j +\\
&\left(2 x\left(q_{1} q_{3}-q_{0} q_{2}\right)+2 y\left(q_{0} q_{1}+q_{2} q_{3}\right)+z\left(q_{0}^{2}-q_{1}^{2}-q_{2}^{2}+q_{3}^{2}\right)\right) k . \\
\end{aligned}

 

\begin{aligned}
&\left(q_{0}+q_{1} i+q_{2} j+q_{3} k\right)(x i+y j+z k)\left(q_{0}-q_{1} i-q_{2} j-q_{3} k\right) = 0
\end{aligned}

 

※ 따라서, 회전된 결과는 q0, q1, q2, q3만 계산하면 얻을 수 있다.

 

4-1. From 쿼터니언 to 회전 행렬

$ q_Rq_Aq^{*}_R$ 공식은 아래와 같이 행렬로 표현이 가능하다(x, y, z 계수만 따로 빼서)

 

M=\left[\begin{array}{lll}
q_{0}^{2}+q_{1}^{2}-q_{2}^{2}-q_{3}^{2} & 2\left(q_{1} q_{2}-q_{0} q_{3}\right) & 2\left(q_{0} q_{2}+q_{1} q_{3}\right) \\
2\left(q_{0} q_{3}+q_{1} q_{2}\right) & q_{0}^{2}-q_{1}^{2}+q_{2}^{2}-q_{3}^{2} & 2\left(q_{2} q_{3}-q_{0} q_{1}\right) \\
2\left(q_{1} q_{3}-q_{0} q_{2}\right) & 2\left(q_{0} q_{1}+q_{2} q_{3}\right) & q_{0}^{2}-q_{1}^{2}-q_{2}^{2}+q_{3}^{2}
\end{array}\right]

 

아래의 식을 만족하므로 최종적으로 쿼터니언을 이용한 회전 결과는 아래와 같이 표현이 가능하다.

$$ |q| = q_{0}^2+ q_{1}^2 +q_{2}^2+q_{3}^2 = 1 $$

 

M=2 \cdot\left[\begin{array}{lll}
q_{0}^{2}+q_{1}^{2}-0.5 & q_{1} q_{2}-q_{0} q_{3} & q_{0} q_{2}+q_{1} q_{3} \\
q_{0} q_{3}+q_{1} q_{2} & q_{0}^{2}+q_{2}^{2}-0.5 & q_{2} q_{3}-q_{0} q_{1} \\
q_{1} q_{3}-q_{0} q_{2} & q_{0} q_{1}+q_{2} q_{3} & q_{0}^{2}+q_{3}^{2}-0.5
\end{array}\right]

 

$Trace(M) = M_{11} + M_{22} + M_{33} $으로 표현해보자. 회전 쿼터니언($q_R$) 계수의 놈(Norm)값인 |q0| ~ |q3|은 아래의 수식으로 표현할 수 있다.

 

$\left|q_{0}\right|=\sqrt{\frac{\operatorname{Trace}(M)+1}{4}}$

$\left|q_{1}\right|=\sqrt{\frac{M_{11}}{2}+\frac{1-\operatorname{Trace}(M)}{4}}$

$\left|q_{2}\right|=\sqrt{\frac{M_{22}}{2}+\frac{1-\operatorname{Trace}(M)}{4}}$

$\left|q_{2}\right|=\sqrt{\frac{M_{33}}{2}+\frac{1-\operatorname{Trace}(M)}{4}}$

 

 

출처: A Tutorial on Euler Angles and Quaternions by Moti Ben-Ari. Department of Science Teaching Weizmann Institute of Science.

 

반응형