Reference: Quaternions*
3D 상에서 angle을 나타내는 방법중 하나인 quaternion에 대해서 공부해 보았다. Quaternion은 rotation matrix에 비해 파라미터 수도 적고 unique한 rotation을 구할 수 있어서 많이 쓰인다.
유래 Quaternion은 한국말로 사원수라고 불리는데 처음 생기게 된 유래는 a + b i a+bi a + b i 로 나타내어지는 복소수는 2차원의 복소 평면상에서 표현할 수가 있는데 3차원 공간을 표현하는 수는 없을까하는 관점에서 나왔다고 한다. 그래서 j 2 = − 1 , i ≠ j j^2=-1, i\neq j j 2 = − 1 , i = j 인 j j j 를 새로 도입을 했을때 곱 연산에서 나오게 되는 i j , j i ij,ji i j , j i 를 실수,i i i ,j j j 로 이루어진 수 체계에서 표현을 할 수가 없는 문제가 생겨 새롭게 k 2 = − 1 , k ≠ i , k ≠ j k^2=-1,k\neq i, k\neq j k 2 = − 1 , k = i , k = j 인 k k k 를 새로 도입하여서 실수, i , j , k i, j, k i , j , k 로 이루어진 사원수라는 수 체계를 완성했다고 한다.
연산 규칙 i 2 = j 2 = k 2 = i j k = − 1 j k = − k j = i k i = − i k = j i j = − j i = k i^2=j^2=k^2=ijk=-1 \\ jk=-kj=i \\ ki=-ik=j \\ ij = -ji = k i 2 = j 2 = k 2 = i j k = − 1 j k = − k j = i k i = − i k = j i j = − j i = k 곱셈에 대해서 교환법칙이 성립하지 않는다.
Quaternion Algebra quaternion q가 있다고 하면 다음과 같이 나타낼 수 있다.
q = q 0 + q 1 i + q 2 j + q 3 k q=q_0+q_1\bold+q_2\bold+q_3\bold q = q 0 + q 1 i + q 2 j + q 3 k p + q = ( p 0 + q 0 ) + ( p 1 + q 1 ) i + ( p 2 + q 2 ) j + ( p 3 + q 3 ) k p+q=(p_0+q_0)+(p_1+q_1)\bold+(p_2+q_2)\bold+(p_3+q_3)\bold p + q = ( p 0 + q 0 ) + ( p 1 + q 1 ) i + ( p 2 + q 2 ) j + ( p 3 + q 3 ) k p q = p 0 q o − ( p 1 q 1 + p 2 q 2 + p 3 q 3 ) + p 0 ( q 1 i + q 2 j + q 3 k ) + q 0 ( p 1 i + p 2 j + p 3 k ) + ( p 2 q 3 − p 3 q 2 ) i + ( p 3 q 1 − p 1 q 3 ) j + ( p 1 q 2 − p 2 q 1 ) k pq=p_0q_o-(p_1q_1+p_2q_2+p_3q_3)+p_0(q_1\bold+q_2\bold+q_3\bold)+q_0(p_1\bold+p_2\bold+p_3\bold)+(p_2q_3-p_3q_2)\bold+(p_3q_1-p_1q_3)\bold+(p_1q_2-p_2q_1)\bold p q = p 0 q o − ( p 1 q 1 + p 2 q 2 + p 3 q 3 ) + p 0 ( q 1 i + q 2 j + q 3 k ) + q 0 ( p 1 i + p 2 j + p 3 k ) + ( p 2 q 3 − p 3 q 2 ) i + ( p 3 q 1 − p 1 q 3 ) j + ( p 1 q 2 − p 2 q 1 ) k Norm∣ q ∣ = q ∗ q ∣ p q ∣ 2 = ( p q ) ( p q ) ∗ = p q q ∗ p ∗ = p ∣ q ∣ 2 p ∗ = p p ∗ ∣ q ∣ 2 = ∣ p ∣ 2 ∣ q ∣ 2 |q|=\sqrt \\ |pq|^2 = (pq)(pq)^* = pqq^*p^* = p|q|^2p^* = pp^*|q|^2=|p|^2|q|^2 ∣ q ∣ = q ∗ q ∣ p q ∣ 2 = ( p q ) ( p q ) ∗ = p q q ∗ p ∗ = p ∣ q ∣ 2 p ∗ = p p ∗ ∣ q ∣ 2 = ∣ p ∣ 2 ∣ q ∣ 2 Inverseq − 1 = q ∗ ∣ q ∣ 2 q^{-1}=\frac{|q|^2} q − 1 = ∣ q ∣ 2 q ∗ Quaternion Rotation Operator quaternion은 알다시피 변수가 4개인 4차원의 vector이다. 그러면 이 quaternion은 3차원상에서 어떤 형태로 존재하는가 하면 우선 real part가 0이 pure quaternion을 봐보자.
unit pure quaternion q q q 에 대해서 다음과 같은 연산을 정의하자
L q ( v ) = q v q ∗ = ( q 0 2 − ∣ ∣ q ∣ ∣ ) v + 2 ( q ⋅ v ) q + 2 q 0 ( q × v ) ∣ ∣ L q ( v ) ∣ ∣ = ∣ ∣ q v q ∗ ∣ ∣ = ∣ q ∣ ⋅ ∣ ∣ v ∣ ∣ ⋅ ∣ q ∗ ∣ = ∣ ∣ v ∣ ∣ L_q(\bold)=q\boldq^*=(q^2_0-||\bold||)\bold+2(\bold\cdot\bold)\bold+2q_0(\bold\times\bold) \\||L_q(\bold)||=||q\boldq^*||=|q|\cdot||v||\cdot|q^*|=||\bold|| L q ( v ) = q v q ∗ = ( q 0 2 − ∣ ∣ q ∣ ∣ ) v + 2 ( q ⋅ v ) q + 2 q 0 ( q × v ) ∣ ∣ L q ( v ) ∣ ∣ = ∣ ∣ q v q ∗ ∣ ∣ = ∣ q ∣ ⋅ ∣ ∣ v ∣ ∣ ⋅ ∣ q ∗ ∣ = ∣ ∣ v ∣ ∣ 우선 이 연산은 v \bold v 의 길이를 바꾸지 않는 연산이며 만약 v \bold v 가 q \bold q 랑 나란하다면 즉, v = k q \bold=k\bold v = k q 의 형식으로 나타낼 수 있다면
q v q ∗ = q ( k q ) q ∗ = ( q 0 2 − ∣ ∣ q ∣ ∣ 2 ) ( k q ) + 2 ( q ⋅ k q ) q + 2 q 0 ( q × k q ) = k ( q 0 2 + ∣ ∣ q ∣ ∣ 2 ) q = k q q\boldq^*=q(k\bold)q^*=(q^2_0-||\bold||^2)(k\bold)+2(\bold\cdot k\bold)\bold+2q_0(\bold\times k\bold)\\=k(q_0^2+||\bold||^2)\bold=k\bold q v q ∗ = q ( k q ) q ∗ = ( q 0 2 − ∣ ∣ q ∣ ∣ 2 ) ( k q ) + 2 ( q ⋅ k q ) q + 2 q 0 ( q × k q ) = k ( q 0 2 + ∣ ∣ q ∣ ∣ 2 ) q = k q q \bold q 와 나란한 어떤 vector도 L q L_q L q 연산을 통해서 v \bold v 의 값을 바꿀 수 없다. 이러한 사실들을 통해서 L q L_q L q 는 q \bold q 에 관한 rotation이 아닐까 하고 추측을 해볼 수 있다. 그리고 이 추측을 구체화 해볼 것이다.
우선 L q L_q L q operator는 linear operation 이다.
L q ( a 1 v 1 + a 2 v 2 ) = a 1 L q ( v 1 ) + a 2 L q ( v 2 ) L_q(a_1\bold_1+a_2\bold_2)=a_1L_q(\bold_1)+a_2L_q(\bold_2) L q ( a 1 v 1 + a 2 v 2 ) = a 1 L q ( v 1 ) + a 2 L q ( v 2 ) Theorem 1. 모든 unit quaternion에 대해서
q = q 0 + q = cos θ 2 + u ^ sin θ 2 q=q_0+\bold=\cos\frac{\theta}+\hat\sin\frac{\theta} q = q 0 + q = cos 2 θ + u ^ sin 2 θ 이며 모든 v ∈ R 3 \bold\in\mathbb^3 v ∈ R 3 에 대해 L q L_q L q operator를 v \bold v 에 적용하는 것은 u ^ \hat u ^ 를 축으로 해 angle을 θ \theta θ 만큼 돌리는 vector의 rotation과 같다.
이 Theorem 1의 증명은 v \bold v 를 q \bold q 에 수직인 성분과 평행한 성분으로 나누어 L q ( v ) L_q(\bold) L q ( v ) 를 전개해서 풀면 위에 설명한 회전에 해당하는 rotation matrix와 v \bold v 의 곱의 형태를 얻을 수 있게 되며 그 rotation matrix는 다음과 같다.
R = ( q 0 2 − ∣ ∣ q ∣ ∣ 2 ) I 3 + 2 q q T + 2 q 0 q × q × = ( 0 − q 3 q 2 q 3 0 − q 1 − q 2 q 1 0 ) R=(q^2_0-||\bold||^2)I_3+2\bold\bold^T+2q_0\bold_{\times} \\ q_{\times}=\begin 0 & -q_3&q_2\\q_3&0&-q_1\\-q_2&q_1&0\end R = ( q 0 2 − ∣ ∣ q ∣ ∣ 2 ) I 3 + 2 q q T + 2 q 0 q × q × = ⎝ ⎜ ⎛ 0 q 3 − q 2 − q 3 0 q 1 q 2 − q 1 0 ⎠ ⎟ ⎞ Theorem 2. 다음과 같은 모든 unit quaternion과
q = q 0 + q = cos θ 2 + u ^ sin θ 2 q=q_0+\bold=\cos\frac{\theta}+\hat\sin\frac{\theta} q = q 0 + q = cos 2 θ + u ^ sin 2 θ 모든 v ∈ R 3 \bold\in\mathbb^3 v ∈ R 3 에 대해서 L q ∗ L_ L q ∗ 를 v \bold v 에 적용하는 것은 v \bold v 를 가만히 두고 coordinate frame을 u ^ \hat u ^ 를 축으로 해 θ \theta θ 만큼 회전하는 것과 같다.
Quaternion Operator Sequences p p p 와 q q q 를 unit quaternion이라 하면 u \bold u 에 우선 L p L_p L p 를 적용하고 그 결과인 v \bold v 를 얻고 그 결과에 L q L_q L q 를 적용해 w \bold w 를 얻는다고 하면 L q ∘ L p L_q\circ L_p L q ∘ L p 의 계산은 다음과 같이 나타낼 수 있다.
L q ∘ L p ( u ) = L q ( v ) = q v q ∗ = q ( p u p ∗ ) q ∗ = ( q p ) u ( q p ) ∗ = L q p ( u ) L_q\circ L_p(\bold)=L_q(\bold)=q\boldq^*=q(p\boldp^*)q^*\\=(qp)\bold(qp)^*=L_(\bold) L q ∘ L p ( u ) = L q ( v ) = q v q ∗ = q ( p u p ∗ ) q ∗ = ( q p ) u ( q p ) ∗ = L q p ( u )
Uploaded by Notion2Tistory v1.1.0