Quaternion 이란?
- 1843년 William Rowan Hamilton(아일랜드 수학자)이 제안한 수 (or 4D vector)로
- real number(실수) $1$과 세 개의 imaginary unit (허수 단위) $i, j, k$를 basis로 가지는
- 4-dimenentional vector space(4차원 벡터 공간)을 구성하는 number의 집합:(vector space를 이루는 vector로 표현 가능)
쉽게 생각하면
- 2D에 해당하는 complex nubmer를 4D로 확장했다고 볼 수 있음
- Computer Graphics, Computer Vision, Robot Engieering 등에서 물체를 3차원으로 회전시키는 공간 변환등을 표현하는 데 많이 사용됨.
- 4d vector space를 이루므로 4개의 real components를 가지는 vector로 표현됨.
다음과 같은 수식으로 표현됨.
$$q=q_0+q_1i+q_2j+q_3k$$
where,
- $q_0,q_1,q_2,q_3$ : real number. vector 표현시 component의 값에 해당.
- $i,j,k$ : imaginary unit. real number axis와 함께 quaternion이 이루는 4d vector space의 basis에 해당함.
가장 기본적인 것은 다음의 imaginary unit들의 곱셈에 대한 성질의 이해임.
- $i^2 = j^2 = k^2 = ijk = -1$
- $ij = k, jk =i, ki = j$
- $ji = -k, kj = -i, ik = -j$
2022.04.05 - [.../Math] - [Math] Definition of Vector Space
Quaternion의 연산
Quaternion의 기본 연산은 다음과 같음:
Addition:
두 Quaternion $p = q_0 + q_0i + q_1j + q_2k$와 $p = p_0 + p_1i + p_2j + p_3k$ 의 Addition은 각 성분별로 이루어짐.
$$q + p = (q_0 + p_0) + (q_1 + p_1)i + (q_2 + p_2)j + (q_3 + p_3)k$$
Multiplication:
두 Quaternion $q$과 $p$의 Multiplication은 다음과 같이 정의됨.
$$q \cdot p = (q_0p_0 - q_1p_1 - q_2p_2 - q_3p_3) + (q_0p_1 + q_1p_0 + q_2p_3 - q_3p_2)i + (q_0p_2 - q_1p_3 + q_2p_0 + q_3p_1)j + (q_0p_3 + q_1p_2 - q_2p_1 + q_3p_0)k $$
Scalar Multiplication:
Quaternion $q = q_0 + q_1i + q_2j + q_3k$에 Scalar $s$ 를 곱하면, 각 성분에 $s$를 곱하는 것임.
$$s \cdot q = sq_0 + (sq_1)i + (sq_2)j + (sq_3)k$$
Inverse:
Quaternion $q$ 의 Inverse는 $q$ 가 영이 아닌 경우 다음과 같이 정의됨.
$$q^{-1} = \frac{\bar{q}}{|q|^2}$$
여기서 $\bar{q}$는 Quaternion의 conjugate(켤레)임.
$$\bar{q} = q_0 - q_1i - q_2j - q_3k$$
$|q|$는 Quaternion의 크기(Norm)임.
$$|q| = \sqrt{q_0^2 + q_1^2 + q_2^2 + q_3^2}$$
Applications
Quaternion은 3차원 회전과 같은 공간 변환을 표현하는 데 유용함.
Computer Vision, Computer Graphics, Robotics 등에서는 Quaternion을 사용하여 객체의 회전을 효율적으로 계산함.
Quaternion을 사용하면 회전 행렬보다 계산 효율이 높고, 연산 안정성이 뛰어남 (특히 interpolation이 우수).
특히, Unit Quaternion(크기가 1인 Quaternion)을 사용하면
Rotation Vector (회전 벡터, Rodrigues' Angle)를 Quaternion으로 쉽게 변환하여 회전 연산을 수행할 수 있음.
Unit Quaternion과 Rodrigues' Angle 변환
Unit Quaternion을 $q_0 + q_1i + q_2j + q_3k$ 형태로 표시하여 Rodrigues' Angle로 변환하는 과정을 설명함.
2023.08.05 - [.../Math] - [Math] Rotation Vector (= Axis-Angle, Rodrigues Angle)
1. Unit Quaternion 과 Rodrigues' Angle 관계:
Unit Quaternion $q = q_0 + q_1i + q_2j + q_3k$가 주어짐.
여기서 $q_0 q_1 , q_2 , q_3$는 실수이고, $i,j ,k$ 는 앞서 설명한 관계의 imaginary unit임.
여기서 Rodrigues' Angle의 회전축 vector $\vec{v}$와 각도 $\theta$의 관계는 다음과 같고 이를 이용하여 변환이 이루어짐.
$$q = \cos\left(\frac{\theta}{2}\right) +\sin\left(\theta\right)\vec{v}$$
2. 회전 각도 $\theta$ 계산:
회전 각도 $\theta$는 다음과 같이 계산됨:
$$ \theta = 2 \cos^{-1}(q_0)$$
where
- $q_0$는 Quaternion의 실수 성분임.
- $\theta$는 $0$ 에서 $2\pi$ 사이의 radian으로 나옴.
3. 회전 축 $\vec{v}$ 계산:
회전 축 $\vec{v}$는 Quaternion의 벡터 부분 $\langle q_1, q_2, q_3 \rangle$ 를 사용하여 계산됨.
회전 축은 방향만을 나타내야 하므로 단위 벡터이며 다음과 같이 계산됨:
$$\vec{v} = \frac{\langle q_1, q_2, q_3 \rangle}{\sin\left(\frac{\theta}{2}\right)}$$
where
- $\sin\left(\frac{\theta}{2}\right)$는 $\theta$ 의 절반에 대한 사인 값임.
- 이 값은 $q_0$와 관계있음.
4. 벡터 부분 $\langle q_1, q_2, q_3 \rangle$ 구하기:
벡터 부분 $\langle q_1, q_2, q_3 \rangle$는 Quaternion의 허수 성분임. 이를 사용하여 회전 축을 계산함.
- 벡터 부분이 $\sin\left(\frac{\theta}{2}\right) $와 곱해진 형태로 나타나므로, $\vec{v} $를 계산할 때 이를 분모로 나눠줌.
- 따라서, $q_1, q_2, q_3$가 주어지면 회전 축은 다음과 같이 계산됨:
$$\vec{v} = \frac{\langle q_1, q_2, q_3 \rangle}{\sqrt{1 - q_0^2}}$$
예시
예를 들어, $q = \frac{\sqrt{3}}{2} + \frac{1}{2\sqrt{3}}i + \frac{1}{2\sqrt{3}}j + \frac{1}{2\sqrt{3}}k$인 경우:
1. 회전 각도 계산:
$$q_0 = \frac{\sqrt{3}}{2} \implies \theta = 2 \cos^{-1}\left(\frac{\sqrt{3}}{2}\right) = 2 \cdot \frac{\pi}{6} = \frac{\pi}{3} = 60^\circ$$
2. 회전 축 계산:
$$\sin\left(\frac{\theta}{2}\right) = \sin\left(\frac{\pi}{6}\right) = \frac{1}{2}$$
$$\vec{v} = \frac{\langle \frac{1}{2\sqrt{3}}, \frac{1}{2\sqrt{3}}, \frac{1}{2\sqrt{3}} \rangle}{\frac{1}{2}} = \langle \frac{1}{\sqrt{3}}, \frac{1}{\sqrt{3}}, \frac{1}{\sqrt{3}} \rangle$$
따라서, 주어진 Unit Quaternion은 회전 각도 $\theta = 60^\circ$ 와 회전 축 $\vec{v} = \langle \frac{1}{\sqrt{3}}, \frac{1}{\sqrt{3}}, \frac{1}{\sqrt{3}} \rangle$로 변환됨.
참고: Quaternion을 Rotation Matrix 로 변환
주어진 Unit Quaternion $q = q_0 + q_1i + q_2j + q_3k$을 3x3 Rotation Matrix(회전 행렬) $R$ 로 변환하는 과정을 설명함.
Rotation Matrix(회전 행렬) $R$ 은 다음과 같이 계산됨:
$$R = \begin{bmatrix}
1 - 2q_2^2 - 2q_3^2 & 2q_1q_2 - 2q_0q_3 & 2q_1q_3 + 2q_0q_2 \\
2q_1q_2 + 2q_0q_3 & 1 - 2q_1^2 - 2q_3^2 & 2q_2q_3 - 2q_0q_1 \\
2q_1q_3 - 2q_0q_2 & 2q_2q_3 + 2q_0q_1 & 1 - 2q_1^2 - 2q_2^2
\end{bmatrix}$$
같이 보면 좋은 자료들
https://colin-broderick.medium.com/deriving-the-quaternion-product-a22858c40921
2024.07.07 - [Programming/DIP] - [Math] Euler Angles and Rotation Matrix
'... > Math' 카테고리의 다른 글
[Math] Identity (항등원) and Inverse (역원) (0) | 2024.07.20 |
---|---|
[Math] Term: Algebra란? (대수란?) (1) | 2024.07.20 |
[Math] Projective Space: $\mathbb{P}^n$, n차원 투영공간 (0) | 2024.07.06 |
[Math] Hypothesis Testing 에서 Conservative Approach (보수적 접근법)란? (1) | 2024.07.05 |
[Math] Duality of Projective Geometry (0) | 2024.06.28 |