쿼터니언은 복수 개념으로 확장 시킨 대수적 구조이다. (오일러 각에서 나오는) 각도와 회전 개념에 비해 덜 직관적이지만, 훨씬 효율적으로 계산할 수 있다.
1843년 수학자 윌리엄 해밀턴은 3차원 회전은 쿼터니언으로 부를 수 있는 복소수로 표현 가능함을 발견하였다
1. 쿼터니언 대수
쿼터니안은 4-튜플로 적을 수 있고, qi는 실수, i, j, k는 허수 이다.
q0+q1i+q2j+q3k
또한, 허수 i, j, k는 아래 식을 만족한다. 아래 식과 같이 i, j, k는 교환 법칙이 성립하지 않는다.
쉽게 기억하기 위해서 아래와 같이 그림을 만들고 시계 방향은 +, 반 시계 방향은 -로 기억한다.

i2=j2=k2=−1ij=k,ji=−kjk=i,kj=−iki=j,ik=−j
두개의 쿼터니언을 더하고 곱하는 공식은 아래와 같다.
(q0+q1i+q2j+q3k)+(p0+p1i+p2j+p3k)=(q0+p0)+(q1+p1)i+(q2+p2)j+(q3+p3)k(q0+q1i+q2j+q3k)(p0+p1i+p2j+p3k)=(q0p0+q1p1i2+q2p2j2+q3p3k2)+(q0p1i+q1p0i+q2p3jk+q3p2kj)+(q0p2j+q2p0j+q1p3ik+q3p1ki)+(q0p3k+q3p0k+q1p2ij+q2p1ji)=(q0p0−q1p1−q2p2−q3p3)+(q0p1+q1p0+q2p3−q3p2)i+(q0p2+q2p0−q1p3+q3p1)j+(q0p3+q3p0+q1p2−q2p1)k
2. 복소수의 켤레(Conjugate)와 절대 값
복소수는 필드(field)를 형성한다. 왜냐하면, 곱셈은 교환 법칙이 성립하며 0이 아닌 복소수는 역원(Inverse)을 가지고 있기 때문이다.
(a+bi)(a−bi)=a2−b2i2=a2+b2(a+bi)(a−bi)a2+b2=1(a+bi)−1=a−bia2+b2.
복소수 z=a+bi에 대해서 켤레는 z∗=a−bi 이다. 그리고 Norm은 |z|=√a2+b2 이다. 역원은 다음과 같이 적을 수 있다.
z−1=z∗|z|2
3. 쿼터니안의 켤레(Conjugate)와 놈(Norm)
q=q0+q1i+q2j+q3k 의 켤레는 q∗=q0−q1i−q2j−q3k 이고,
Norm은 다음과 같다. |q|=√q20+q21+q22+q23
모든 0이 아닌 쿼터니언은 역원을 가지고 있다. 다만, (복소수와는 다르게) 쿼터니안은 교환법칙이 성립하지 않기 때문에 필드(field)를 형성하지는 않는다.
4. 회전에서의 쿼터니언
3차원 공간상에서 벡터는 (실수가 없는, 허수만으로 이루어진) 쿼터니언으로 표현될 수 있다. qA=0+xi+yj+zk
회전은 놈(Norm) 값이 1인 쿼터니언 qR=q0+q1i+q2j+q3k로 표현될 수 있다(|qR|=1)
A 좌표계에서 B좌표계로의 회전은 아래와 같이 표현할 수 있다.
qB=qRqAq∗R
해당 계산 결과는 쿼터니언 qB를 출력값으로 가지며 이는 qA와 마찬가지로 3차원 상의 벡터이며 허수만으로 이루어진 쿼터니언이다. 쿼터니언으로 표현한 회전은 오일러 각도 표현법과는 다르게 회전 시 삼각함수 연산이 필요하지 않다. 덧셈, 곱셈만 연산이 사용된다(회전 연산의 쿼터니언 표현법 장점)
qRqAq∗R=(q0+q1i+q2j+q3k)(xi+yj+zk)(q0−q1i−q2j−q3k)=(x(q20+q21−q22−q23)+2y(q1q2−q0q3)+2z(q0q2+q1q3))i+(2x(q0q3+q1q2)+y(q20−q21+q22−q23)+2z(q2q3−q0q1))j+(2x(q1q3−q0q2)+2y(q0q1+q2q3)+z(q20−q21−q22+q23))k.
(q0+q1i+q2j+q3k)(xi+yj+zk)(q0−q1i−q2j−q3k)=0
※ 따라서, 회전된 결과는 q0, q1, q2, q3만 계산하면 얻을 수 있다.
4-1. From 쿼터니언 to 회전 행렬
qRqAq∗R 공식은 아래와 같이 행렬로 표현이 가능하다(x, y, z 계수만 따로 빼서)
M=\left[q20+q21−q22−q232(q1q2−q0q3)2(q0q2+q1q3)2(q0q3+q1q2)q20−q21+q22−q232(q2q3−q0q1)2(q1q3−q0q2)2(q0q1+q2q3)q20−q21−q22+q23\right]
아래의 식을 만족하므로 최종적으로 쿼터니언을 이용한 회전 결과는 아래와 같이 표현이 가능하다.
|q|=q20+q21+q22+q23=1
M=2 \cdot\left[q20+q21−0.5q1q2−q0q3q0q2+q1q3q0q3+q1q2q20+q22−0.5q2q3−q0q1q1q3−q0q2q0q1+q2q3q20+q23−0.5\right]
Trace(M)=M11+M22+M33으로 표현해보자. 회전 쿼터니언(qR) 계수의 놈(Norm)값인 |q0| ~ |q3|은 아래의 수식으로 표현할 수 있다.
|q0|=√Trace(M)+14
|q1|=√M112+1−Trace(M)4
|q2|=√M222+1−Trace(M)4
|q2|=√M332+1−Trace(M)4
출처: A Tutorial on Euler Angles and Quaternions by Moti Ben-Ari. Department of Science Teaching Weizmann Institute of Science.