이 글은 로드리게스 회전 을 이해하고 접하시길 추천드립니다.
사원수에 대해 알아봅니다.
사원수와 오일러 각의 관계를 알아봅니다.
쿼터니언 회전과 그 행렬에 대해 알아봅니다.
사원수 Quaternion
사원수는 아일랜드의 수학자 윌리엄 해밀턴(William Rowan Hamilton)이 복소수를 확장해 만든 수체계입니다. 복소수를 일반적으로 a + b i a + bi a + b i 로 쓸 수 있다면 사원수는 a + b i + c j + d k a + bi + cj + dk a + b i + c j + d k 와 같이 쓸 수 있습니다. 이 때 a a a 는 실수부, b i + c j + d k bi + cj + dk b i + c j + d k 는 허수부 또는 벡터부라 합니다. 사원수는 아래와 같은 매우 짧은 식으로부터 정의됩니다.
i 2 = j 2 = k 2 = i j k = − 1 i^2 = j^2 = k^2 = ijk = -1 i 2 = j 2 = k 2 = i j k = − 1
i j k = − 1 ijk = -1 i j k = − 1 의 양변에 i i i , j j j , k k k 를 곱하며 다음과 같은 식들을 이끌어낼 수 있습니다.
i j = k j i = − k j k = i k j = − i k i = j i k = − j \begin{aligned}
ij &= k \\
ji &= -k \\
jk &= i \\
kj &= -i \\
ki &= j \\
ik &= -j
\end{aligned} i j j i j k k j k i i k = k = − k = i = − i = j = − j
위 식에서 알 수 있는 중요한 사실은 사원수의 곱셈에 교환법칙이 성립하지 않는다는 것입니다.
두 사원수 w = w 0 + w 1 i + w 2 j + w 3 k w = w_0 + w_1i + w_2j + w_3k w = w 0 + w 1 i + w 2 j + w 3 k 와 z = z 0 + z 1 i + z 2 j + z 3 k z = z_0 + z_1i + z_2j + z_3k z = z 0 + z 1 i + z 2 j + z 3 k 에 대해 곱셈 w z wz w z 는 다음과 같습니다.
w z = ( s w , v w ) ( s z , v z ) = s w s z − v w ⋅ v z + s w v z + s z v w + v w × v z wz = (s_w, v_w)(s_z, v_z) = s_w s_z - v_w \cdot v_z + s_w v_z + s_z v_w + v_w \times v_z w z = ( s w , v w ) ( s z , v z ) = s w s z − v w ⋅ v z + s w v z + s z v w + v w × v z
이 때 s x s_x s x 는 실수부 값을, v x v_x v x 는 벡터부를 의미합니다. 다소 복잡해 보이지만 w z wz w z 를 직접 전개하면 얻을 수 있습니다.
w z = ( w 0 + w 1 i + w 2 j + w 3 k ) ( z 0 + z 1 i + z 2 j + z 3 k ) = w 0 z 0 − ( w 1 z 1 + w 2 z 2 + w 3 z 3 ) + ( w 0 z 1 + w 1 z 0 + w 2 z 3 − w 3 z 2 ) i + ( w 0 z 2 + w 2 z 0 + w 3 z 1 − w 1 z 3 ) j + ( w 0 z 3 + w 3 z 0 + w 1 z 2 − w 2 z 1 ) k = w 0 z 0 − ( w ⋅ z ) + w 0 [ z ] + z 0 [ w ] + [ w 2 z 3 − w 3 z 2 w 3 z 1 − w 1 z 3 w 1 z 2 − w 2 z 1 ] = w 0 z 0 − ( v w ⋅ v z ) + w 0 v z + z 0 v w + v w × v z \begin{aligned}
wz & = (w_0 + w_1i + w_2j + w_3k)(z_0 + z_1i + z_2j + z_3k) \\
& = w_0 z_0 - (w_1 z_1 + w_2 z_2 + w_3 z_3) \\
& + (w_0 z_1 + w_1 z_0 + w_2 z_3 - w_3 z_2)i \\
& + (w_0 z_2 + w_2 z_0 + w_3 z_1 - w_1 z_3)j \\
& + (w_0 z_3 + w_3 z_0 + w_1 z_2 - w_2 z_1)k \\ \\
& = w_0 z_0 - (w \cdot z) + w_0 \begin{bmatrix}
\text{ } \\
z \\
\text{ }
\end{bmatrix} + z_0 \begin{bmatrix}
\text{ } \\
w \\
\text{ }
\end{bmatrix} + \begin{bmatrix}
w_2 z_3 - w_3 z_2 \\
w_3 z_1 - w_1 z_3 \\
w_1 z_2 - w_2 z_1
\end{bmatrix} \\
& = w_0 z_0 - (v_w \cdot v_z) + w_0 v_z + z_0 v_w + v_w \times v_z
\end{aligned} w z = ( w 0 + w 1 i + w 2 j + w 3 k ) ( z 0 + z 1 i + z 2 j + z 3 k ) = w 0 z 0 − ( w 1 z 1 + w 2 z 2 + w 3 z 3 ) + ( w 0 z 1 + w 1 z 0 + w 2 z 3 − w 3 z 2 ) i + ( w 0 z 2 + w 2 z 0 + w 3 z 1 − w 1 z 3 ) j + ( w 0 z 3 + w 3 z 0 + w 1 z 2 − w 2 z 1 ) k = w 0 z 0 − ( w ⋅ z ) + w 0 ⎣ ⎢ ⎡ z ⎦ ⎥ ⎤ + z 0 ⎣ ⎢ ⎡ w ⎦ ⎥ ⎤ + ⎣ ⎢ ⎡ w 2 z 3 − w 3 z 2 w 3 z 1 − w 1 z 3 w 1 z 2 − w 2 z 1 ⎦ ⎥ ⎤ = w 0 z 0 − ( v w ⋅ v z ) + w 0 v z + z 0 v w + v w × v z
사원수의 곱셈을 이용해 다음과 같은 간단한 정리도 이끌어 낼 수 있습니다.
w z − z w = s w s z − v w ⋅ v z + s w v z + s z v w + ( v w × v z ) − ( s z s w − v z ⋅ v w + s z v w + s w v z + ( v z × v w ) ) = ( v w × v z ) − ( v z × v w ) = 2 ( v w × v z ) \begin{aligned}
wz - zw & = s_w s_z - v_w \cdot v_z + s_w v_z + s_z v_w + (v_w \times v_z) \\
& - (s_z s_w - v_z \cdot v_w + s_z v_w + s_w v_z + (v_z \times v_w)) \\ \\
& = (v_w \times v_z) - (v_z \times v_w) \\
& = 2(v_w \times v_z)
\end{aligned} w z − z w = s w s z − v w ⋅ v z + s w v z + s z v w + ( v w × v z ) − ( s z s w − v z ⋅ v w + s z v w + s w v z + ( v z × v w ) ) = ( v w × v z ) − ( v z × v w ) = 2 ( v w × v z )
위 식은 [ w , z ] = w z − z w [w, z] = wz - zw [ w , z ] = w z − z w 로 쓰기도 합니다.
사원수의 실수부가 0인 경우를 pure quaternion 이라 합니다. 사원수 w w w 와 z z z 가 pure quaternion 일 때 다음이 성립합니다.
w z + z w = s w s z − v w ⋅ v z + s w v z + s z v w + ( v w × v z ) + s z s w − v z ⋅ v w + s z v w + s w v z + ( v z × v w ) = − 2 ( v w ⋅ v z ) + ( v w × v z ) + ( v z × v w ) ( ∵ s w , s z = 0 ) = − 2 ( v w ⋅ v z ) + ( v w × v z ) − ( v w × v z ) = − 2 ( v w ⋅ v z ) \begin{aligned}
wz + zw & = s_w s_z - v_w \cdot v_z + s_w v_z + s_z v_w + (v_w \times v_z) \\
& + s_z s_w - v_z \cdot v_w + s_z v_w + s_w v_z + (v_z \times v_w) \\ \\
& = -2(v_w \cdot v_z) + (v_w \times v_z) + (v_z \times v_w) (\because s_w, s_z = 0)\\
& = -2(v_w \cdot v_z) + (v_w \times v_z) - (v_w \times v_z) \\
& = -2(v_w \cdot v_z)
\end{aligned} w z + z w = s w s z − v w ⋅ v z + s w v z + s z v w + ( v w × v z ) + s z s w − v z ⋅ v w + s z v w + s w v z + ( v z × v w ) = − 2 ( v w ⋅ v z ) + ( v w × v z ) + ( v z × v w ) ( ∵ s w , s z = 0 ) = − 2 ( v w ⋅ v z ) + ( v w × v z ) − ( v w × v z ) = − 2 ( v w ⋅ v z )
복소수에 대응하는 켤레 복소수를 곱하면 복소수의 크기의 제곱을 얻습니다. 이는 복소수 z = a + b i z = a + bi z = a + b i 에 대해 다음과 같은 식이 성립함을 의미합니다.
z z ∗ = ( a + b i ) ( a − b i ) = a 2 + b 2 = ∥ z ∥ 2 ( z ∗ 는 z 의 켤레복소수 ) \begin{aligned}
zz^* = (a + bi)(a - bi) = a^2 + b^2 = \parallel z \parallel ^2 \\
(z^*는 \text{ }z의 \text{ }켤레복소수)
\end{aligned} z z ∗ = ( a + b i ) ( a − b i ) = a 2 + b 2 = ∥ z ∥ 2 ( z ∗ 는 z 의 켤 레 복 소 수 )
사원수에 대해서도 켤레 사원수(conjugate quaternion)를 정의합니다. 사원수 q = q 0 + q 1 i + q 2 j + q 3 k q = q_0 + q_1i + q_2j + q_3k q = q 0 + q 1 i + q 2 j + q 3 k 에 대해 다음이 성립합니다.
q q ∗ = ( q 0 + q 1 i + q 2 j + q 3 k ) ( q 0 − q 1 i − q 2 j − q 3 k ) = q 0 2 + q 1 2 + q 2 2 + q 3 2 = ∥ q ∥ 2 ( q ∗ 는 q 의 켤레사원수 ) \begin{aligned}
qq^* & = (q_0 + q_1i + q_2j + q_3k)(q_0 - q_1i - q_2j - q_3k) \\
& = q_0^2 + q_1^2 + q_2^2 + q_3^2 \\
& = \parallel q \parallel ^2 \\
& (q^*는 \text{ }q의 \text{ }켤레사원수)
\end{aligned} q q ∗ = ( q 0 + q 1 i + q 2 j + q 3 k ) ( q 0 − q 1 i − q 2 j − q 3 k ) = q 0 2 + q 1 2 + q 2 2 + q 3 2 = ∥ q ∥ 2 ( q ∗ 는 q 의 켤 레 사 원 수 )
사원수 q q q 의 크기 ∥ q ∥ \parallel q \parallel ∥ q ∥ 가 1일 때 사원수 q q q 를 단위 사원수라고 합니다. 단위 사원수에 대해 사원수의 크기에 대한 식 q q ∗ = ∥ q ∥ 2 qq^* = \parallel q \parallel ^2 q q ∗ = ∥ q ∥ 2 을 이용해 식 q ∗ = q − 1 q^* = q^{-1} q ∗ = q − 1 을 이끌어낼 수 있습니다.
q q ∗ = ∥ q ∥ 2 q ∗ = ∥ q ∥ 2 q − 1 q ∗ = q − 1 \begin{aligned}
& qq^* = \parallel q \parallel ^2 \\
& q^* = \parallel q \parallel ^2 q^{-1} \\
& q^* = q^{-1}
\end{aligned} q q ∗ = ∥ q ∥ 2 q ∗ = ∥ q ∥ 2 q − 1 q ∗ = q − 1
오일러 각과 사원수
w = w 0 + w 1 i + w 2 j + w 3 k w = w_0 + w_1i + w_2j + w_3k w = w 0 + w 1 i + w 2 j + w 3 k 가 단위 사원수라 할 때 ∥ w ∥ 2 = w 0 2 + w 1 2 + w 2 2 + w 3 2 = 1 \parallel w \parallel ^2 = w_0^2 + w_1^2 + w_2^2 + w_3^2 = 1 ∥ w ∥ 2 = w 0 2 + w 1 2 + w 2 2 + w 3 2 = 1 이므로 − 1 ≤ w 0 ≤ 1 -1 \le w_0 \le 1 − 1 ≤ w 0 ≤ 1 입니다. 따라서 w 0 = c o s θ w_0 = cos\theta w 0 = c o s θ 로 쓸 수 있습니다.
w = c o s θ + v ( v = w 1 i + w 2 j + w 3 k ) w = cos\theta + v\text{ }\text{ }(v = w_1i + w_2j + w_3k) w = c o s θ + v ( v = w 1 i + w 2 j + w 3 k ) 라 다시 쓸 때 다음이 성립합니다.
∥ w ∥ 2 = c o s 2 θ + ∥ v ∥ 2 = 1 → ∥ v ∥ 2 = 1 − c o s 2 θ = s i n 2 θ \begin{aligned}
\parallel w \parallel ^2 = cos^2 \theta + \parallel v \parallel ^2 = 1 \\
\to \parallel v \parallel ^2 = 1 - cos^2 \theta = sin^2 \theta
\end{aligned} ∥ w ∥ 2 = c o s 2 θ + ∥ v ∥ 2 = 1 → ∥ v ∥ 2 = 1 − c o s 2 θ = s i n 2 θ
w w w 의 벡터부 v v v 를 ∥ v ∥ u ^ \parallel v \parallel \hat{u} ∥ v ∥ u ^ 라 할 때 (u ^ \hat{u} u ^ 는 v v v 와 방향이 같은 단위벡터) 다음과 같이 식을 다시 쓸 수 있습니다.
v = ∥ v ∥ u ^ = u ^ s i n θ \begin{aligned}
v & = \parallel v \parallel \hat{u} \\
& = \hat{u} sin\theta
\end{aligned} v = ∥ v ∥ u ^ = u ^ s i n θ
따라서 w = c o s θ + v w = cos\theta + v w = c o s θ + v 를 다음과 같이 오일러 각에 대한 표현으로 바꿔 쓸 수 있습니다.
w = c o s θ + u ^ s i n θ = e θ u ^ w = cos \theta + \hat{u} sin \theta = e^{\theta \hat{u}} w = c o s θ + u ^ s i n θ = e θ u ^
쿼터니언 회전
아래 그림은 벡터 회전축 n ^ \hat{n} n ^ 과 벡터 v v v 의 n ^ \hat{n} n ^ 에 대한 회전을 보여주고 있습니다.
위 그림은 로드리게스 회전 을 이용해 아래와 같이 쓸 수 있습니다.
v ′ = v ∥ n + v ′ ⊥ n v' = v^{\parallel n} + v'^{\perp n} v ′ = v ∥ n + v ′ ⊥ n
v ′ ⊥ n v'^{\perp n} v ′ ⊥ n 은 오일러의 각을 이용해 아래와 같이 다시 쓸 수 있습니다.
v ′ ⊥ n = e θ n ^ v ⊥ n → v ′ = v ∥ n + e θ n ^ v ⊥ n \begin{aligned}
v'^{\perp n} = e^{\theta \hat{n}} v^{\perp n} \\
\to v' = v^{\parallel n} + e^{\theta \hat{n}} v^{\perp n}
\end{aligned} v ′ ⊥ n = e θ n ^ v ⊥ n → v ′ = v ∥ n + e θ n ^ v ⊥ n
앞으로 보게 될 두 가지 정리는 위 식을 이용해 회전을 사원수의 곱셈으로 표현하는데 이용됩니다. 첫번째 정리는 아래와 같습니다. (식의 가독성을 위해 v ⊥ n ^ v^{\perp \hat{n}} v ⊥ n ^ 은 v ⊥ v_{\perp} v ⊥ 로, v ∥ n ^ v^{\parallel \hat{n}} v ∥ n ^ 은 v ∥ v_{\parallel} v ∥ 로 표기하였습니다.)
e θ n ^ v ⊥ = v ⊥ e − θ n ^ e^{\theta \hat{n}} v_{\perp} = v_{\perp} e^{-\theta \hat{n}} e θ n ^ v ⊥ = v ⊥ e − θ n ^
사원수의 곱셈을 이용해 이를 증명할 수 있습니다.
e θ n ^ v ⊥ = ( c o s θ , n ^ s i n θ ) ( 0 , v ⊥ ) = − n ^ ⋅ v ⊥ s i n θ + v ⊥ c o s θ + ( n ^ × v ⊥ ) s i n θ = v ⊥ c o s θ + ( n ^ × v ⊥ ) s i n θ ( ∵ n ^ ⋅ v ⊥ = 0 ) v ⊥ e − θ n ^ = ( 0 , v ⊥ ) ( c o s θ , − n ^ s i n θ ) = − v ⊥ ⋅ ( − n ^ ) s i n θ + v ⊥ c o s θ − ( v ⊥ × n ^ ) s i n θ = v ⊥ c o s θ + ( n ^ × v ⊥ ) s i n θ ( ∵ n ^ ⋅ v ⊥ = 0 ) ∴ e θ n ^ v ⊥ = v ⊥ e − θ n ^ \begin{aligned}
e^{\theta \hat{n}} v_{\perp} & = (cos\theta, \hat{n}sin\theta)(0, v_{\perp}) \\ \\
& = -\hat{n} \cdot v_{\perp} sin\theta + v_{\perp} cos\theta + (\hat{n} \times v_{\perp}) sin\theta \\ \\
& = v_{\perp} cos\theta + (\hat{n} \times v_{\perp}) sin\theta \text{ }\text{ }\text{ }(\because \hat{n} \cdot v_{\perp} = 0) \\ \\ \\
v_{\perp} e^{-\theta \hat{n}} & = (0, v_{\perp})(cos\theta, -\hat{n}sin\theta) \\ \\
& = - v_{\perp} \cdot (-\hat{n}) sin\theta + v_{\perp} cos\theta - (v_{\perp} \times \hat{n}) sin\theta \\ \\
& = v_{\perp} cos\theta + (\hat{n} \times v_{\perp}) sin\theta \text{ }\text{ }\text{ }(\because \hat{n} \cdot v_{\perp} = 0) \\ \\ \\
& \therefore e^{\theta \hat{n}} v_{\perp} = v_{\perp} e^{-\theta \hat{n}}
\end{aligned} e θ n ^ v ⊥ v ⊥ e − θ n ^ = ( c o s θ , n ^ s i n θ ) ( 0 , v ⊥ ) = − n ^ ⋅ v ⊥ s i n θ + v ⊥ c o s θ + ( n ^ × v ⊥ ) s i n θ = v ⊥ c o s θ + ( n ^ × v ⊥ ) s i n θ ( ∵ n ^ ⋅ v ⊥ = 0 ) = ( 0 , v ⊥ ) ( c o s θ , − n ^ s i n θ ) = − v ⊥ ⋅ ( − n ^ ) s i n θ + v ⊥ c o s θ − ( v ⊥ × n ^ ) s i n θ = v ⊥ c o s θ + ( n ^ × v ⊥ ) s i n θ ( ∵ n ^ ⋅ v ⊥ = 0 ) ∴ e θ n ^ v ⊥ = v ⊥ e − θ n ^
두번째 정리는 아래와 같습니다.
e θ n ^ v ∥ = v ∥ e θ n ^ e^{\theta \hat{n}} v_{\parallel} = v_{\parallel} e^{\theta \hat{n}} e θ n ^ v ∥ = v ∥ e θ n ^
증명은 첫번째 정리와 같이 사원수의 곱셈을 이용합니다.
e θ n ^ v ∥ = ( c o s θ , n ^ s i n θ ) ( 0 , v ∥ ) = − n ^ ⋅ v ∥ s i n θ + v ∥ c o s θ + ( n ^ × v ∥ ) s i n θ = − n ^ ⋅ v ∥ s i n θ + v ∥ c o s θ ( ∵ n ^ × v ∥ = 0 ) v ∥ e θ n ^ = ( 0 , v ∥ ) ( c o s θ , n ^ s i n θ ) = − v ∥ ⋅ n ^ s i n θ + v ∥ c o s θ + ( v ∥ × n ^ ) s i n θ = − v ∥ ⋅ n ^ s i n θ + v ∥ c o s θ ( ∵ v ∥ × n ^ = 0 ) ∴ e θ n ^ v ∥ = v ∥ e θ n ^ \begin{aligned}
e^{\theta \hat{n}} v_{\parallel} & = (cos\theta, \hat{n}sin\theta)(0, v_{\parallel}) \\ \\
& = -\hat{n} \cdot v_{\parallel} sin\theta + v_{\parallel} cos\theta + (\hat{n} \times v_{\parallel}) sin\theta \\ \\
& = -\hat{n} \cdot v_{\parallel} sin\theta + v_{\parallel} cos\theta\text{ }\text{ }\text{ }(\because \hat{n} \times v_{\parallel} = 0) \\ \\ \\
v_{\parallel} e^{\theta \hat{n}} & = (0, v_{\parallel})(cos\theta, \hat{n}sin\theta) \\ \\
& = - v_{\parallel} \cdot \hat{n} sin\theta + v_{\parallel} cos\theta + (v_{\parallel} \times \hat{n}) sin\theta \\ \\
& = - v_{\parallel} \cdot \hat{n} sin\theta + v_{\parallel} cos\theta \text{ }\text{ }\text{ }(\because v_{\parallel} \times \hat{n} = 0) \\ \\ \\
& \therefore e^{\theta \hat{n}} v_{\parallel} = v_{\parallel} e^{\theta \hat{n}}
\end{aligned} e θ n ^ v ∥ v ∥ e θ n ^ = ( c o s θ , n ^ s i n θ ) ( 0 , v ∥ ) = − n ^ ⋅ v ∥ s i n θ + v ∥ c o s θ + ( n ^ × v ∥ ) s i n θ = − n ^ ⋅ v ∥ s i n θ + v ∥ c o s θ ( ∵ n ^ × v ∥ = 0 ) = ( 0 , v ∥ ) ( c o s θ , n ^ s i n θ ) = − v ∥ ⋅ n ^ s i n θ + v ∥ c o s θ + ( v ∥ × n ^ ) s i n θ = − v ∥ ⋅ n ^ s i n θ + v ∥ c o s θ ( ∵ v ∥ × n ^ = 0 ) ∴ e θ n ^ v ∥ = v ∥ e θ n ^
이제 식 v ′ = v ∥ n ^ + e θ n ^ v ⊥ n ^ v' = v^{\parallel \hat{n}} + e^{\theta \hat{n}} v^{\perp \hat{n}} v ′ = v ∥ n ^ + e θ n ^ v ⊥ n ^ 을 조금 변경해보겠습니다.
v ′ = e θ 2 n ^ e − θ 2 n ^ v ∥ n ^ + e θ 2 n ^ e θ 2 n ^ v ⊥ n ^ v' = e^{\frac{\theta}{2}\hat{n}} e^{-\frac{\theta}{2}\hat{n}} v^{\parallel \hat{n}} + e^{\frac{\theta}{2}\hat{n}} e^{\frac{\theta}{2}\hat{n}} v^{\perp \hat{n}} v ′ = e 2 θ n ^ e − 2 θ n ^ v ∥ n ^ + e 2 θ n ^ e 2 θ n ^ v ⊥ n ^
앞서 살펴본 두 개의 정리를 이용해 위 식을 다음과 같이 바꿔 쓸 수 있습니다.
v ′ = e θ 2 n ^ v ∥ n ^ e − θ 2 n ^ + e θ 2 n ^ v ⊥ n ^ e − θ 2 n ^ = e θ 2 n ^ ( v ∥ n ^ + v ⊥ n ^ ) e − θ 2 n ^ = e θ 2 n ^ v e − θ 2 n ^ \begin{aligned}
v' & = e^{\frac{\theta}{2}\hat{n}} v^{\parallel \hat{n}} e^{-\frac{\theta}{2}\hat{n}} + e^{\frac{\theta}{2}\hat{n}} v^{\perp \hat{n}} e^{-\frac{\theta}{2}\hat{n}} \\
& = e^{\frac{\theta}{2}\hat{n}} (v^{\parallel \hat{n}} + v^{\perp \hat{n}}) e^{-\frac{\theta}{2}\hat{n}} \\
& = e^{\frac{\theta}{2}\hat{n}} v e^{-\frac{\theta}{2}\hat{n}}
\end{aligned} v ′ = e 2 θ n ^ v ∥ n ^ e − 2 θ n ^ + e 2 θ n ^ v ⊥ n ^ e − 2 θ n ^ = e 2 θ n ^ ( v ∥ n ^ + v ⊥ n ^ ) e − 2 θ n ^ = e 2 θ n ^ v e − 2 θ n ^
따라서 사원수 q = e θ 2 n ^ = c o s θ 2 + n ^ s i n θ 2 q = e^{\frac{\theta}{2}\hat{n}} = cos\frac{\theta}{2} + \hat{n}sin\frac{\theta}{2} q = e 2 θ n ^ = c o s 2 θ + n ^ s i n 2 θ 라면 식 e θ 2 n ^ v e − θ 2 n ^ e^{\frac{\theta}{2}\hat{n}} v e^{-\frac{\theta}{2}\hat{n}} e 2 θ n ^ v e − 2 θ n ^ 을 q v q ∗ qvq^* q v q ∗ 라 쓸 수 있고 이는 축 n ^ \hat{n} n ^ 에 대해 θ \theta θ 만큼 회전한 v ′ v' v ′ 입니다.
v ′ = q v q ∗ v' = qvq^* v ′ = q v q ∗
쿼터니언 회전 행렬
단위 사원수 q q q 와 벡터 v v v 에 대한 식 q v q ∗ qvq^* q v q ∗ 을 이용해 쿼터니언 회전 행렬을 구해보겠습니다. 먼저 q v q ∗ qvq^* q v q ∗ 을 직접 전개합니다. (아래 전개식은 단순화 되었습니다. 전체 전개 과정이 상당히 복잡하니 참고링크 의 부록을 보시는 것을 추천드립니다.)
q v q ∗ = ( q 0 + q 1 i + q 2 j + q 3 k ) ( v 1 i + v 2 j + v 3 k ) ( q 0 − q 1 i − q 2 j − q 3 k ) = ( v 1 ( q 0 2 + q 1 2 − q 2 2 − q 3 2 ) + 2 v 2 ( q 1 q 2 − q 0 q 3 ) + 2 v 3 ( q 0 q 2 + q 1 q 3 ) ) i + ( 2 v 1 ( q 0 q 3 + q 1 q 2 ) + v 2 ( q 0 2 − q 1 2 + q 2 2 − q 3 2 ) + 2 v 3 ( q 2 q 3 − q 0 q 1 ) ) j + ( 2 v 1 ( q 1 q 3 − q 0 q 2 ) + 2 v 2 ( q 0 q 1 + q 2 q 3 ) + v 3 ( q 0 2 − q 1 2 − q 2 2 + q 3 2 ) ) k \begin{aligned}
qvq^* & = (q_0 + q_1i + q_2j + q_3k)(v_1i + v_2j + v_3k)(q_0 - q_1i - q_2j - q_3k) \\
& = (v_1(q_0^2 + q_1^2 - q_2^2 - q_3^2) + 2v_2(q_1 q_2 - q_0 q_3) + 2v_3(q_0 q_2 + q_1 q_3))i \\
& + (2v_1(q_0 q_3 + q_1 q_2) + v_2(q_0^2 - q_1^2 + q_2^2 - q_3^2) + 2v_3(q_2 q_3 - q_0 q_1))j \\
& + (2v_1(q_1 q_3 - q_0 q_2) + 2v_2(q_0 q_1 + q_2 q_3) + v_3(q_0^2 - q_1^2 - q_2^2 + q_3^2))k
\end{aligned} q v q ∗ = ( q 0 + q 1 i + q 2 j + q 3 k ) ( v 1 i + v 2 j + v 3 k ) ( q 0 − q 1 i − q 2 j − q 3 k ) = ( v 1 ( q 0 2 + q 1 2 − q 2 2 − q 3 2 ) + 2 v 2 ( q 1 q 2 − q 0 q 3 ) + 2 v 3 ( q 0 q 2 + q 1 q 3 ) ) i + ( 2 v 1 ( q 0 q 3 + q 1 q 2 ) + v 2 ( q 0 2 − q 1 2 + q 2 2 − q 3 2 ) + 2 v 3 ( q 2 q 3 − q 0 q 1 ) ) j + ( 2 v 1 ( q 1 q 3 − q 0 q 2 ) + 2 v 2 ( q 0 q 1 + q 2 q 3 ) + v 3 ( q 0 2 − q 1 2 − q 2 2 + q 3 2 ) ) k
전개식을 행렬로 변환하면 다음과 같습니다.
M v = [ q 0 2 + q 1 2 − q 2 2 − q 3 2 2 ( q 1 q 2 − q 0 q 3 ) 2 ( q 0 q 2 + q 1 q 3 ) 2 ( q 0 q 3 + q 1 q 2 ) q 0 2 − q 1 2 + q 2 2 − q 3 2 2 ( q 2 q 3 − q 0 q 1 ) 2 ( q 1 q 3 − q 0 q 2 ) 2 ( q 0 q 1 + q 2 q 3 ) q 0 2 − q 1 2 − q 2 2 + q 3 2 ] [ v 1 v 2 v 3 ] Mv = \begin{bmatrix}
q_0^2 + q_1^2 - q_2^2 - q_3^2 & 2(q_1 q_2 - q_0 q_3) & 2(q_0 q_2 + q_1 q_3) \\
2(q_0 q_3 + q_1 q_2) & q_0^2 - q_1^2 + q_2^2 - q_3^2 & 2(q_2 q_3 - q_0 q_1) \\
2(q_1 q_3 - q_0 q_2) & 2(q_0 q_1 + q_2 q_3) & q_0^2 - q_1^2 - q_2^2 + q_3^2
\end{bmatrix}
\begin{bmatrix}
v_1 \\
v_2 \\
v_3
\end{bmatrix} M v = ⎣ ⎢ ⎡ q 0 2 + q 1 2 − q 2 2 − q 3 2 2 ( q 0 q 3 + q 1 q 2 ) 2 ( q 1 q 3 − q 0 q 2 ) 2 ( q 1 q 2 − q 0 q 3 ) q 0 2 − q 1 2 + q 2 2 − q 3 2 2 ( q 0 q 1 + q 2 q 3 ) 2 ( q 0 q 2 + q 1 q 3 ) 2 ( q 2 q 3 − q 0 q 1 ) q 0 2 − q 1 2 − q 2 2 + q 3 2 ⎦ ⎥ ⎤ ⎣ ⎢ ⎡ v 1 v 2 v 3 ⎦ ⎥ ⎤
q q q 는 단위 사원수이므로 q 0 2 + q 1 2 + q 2 2 + q 3 2 = 1 q_0^2 + q_1^2 + q_2^2 + q_3^2 = 1 q 0 2 + q 1 2 + q 2 2 + q 3 2 = 1 입니다. 이를 이용해 행렬 M M M 을 변형할 수 있습니다.
M = 2 ⋅ [ 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 ] M = 2 \cdot \begin{bmatrix}
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{bmatrix} M = 2 ⋅ ⎣ ⎢ ⎡ q 0 2 + q 1 2 − 0 . 5 q 0 q 3 + q 1 q 2 q 1 q 3 − q 0 q 2 q 1 q 2 − q 0 q 3 q 0 2 + q 2 2 − 0 . 5 q 0 q 1 + q 2 q 3 q 0 q 2 + q 1 q 3 q 2 q 3 − q 0 q 1 q 0 2 + q 3 2 − 0 . 5 ⎦ ⎥ ⎤
이번에는 회전 행렬 M M M 을 이용해 사원수의 원소 q 0 , q 1 , q 2 , q 3 q_0, q_1, q_2, q_3 q 0 , q 1 , q 2 , q 3 를 구하는 식을 유도해 보겠습니다. 행렬의 대각원소의 합 T r a c e ( M ) Trace(M) T r a c e ( M ) 을 이용해 다음과 같이 쓸 수 있습니다.
T r a c e ( M ) = 2 ( 3 q 0 2 + q 1 2 + q 2 2 + q 3 2 − 1.5 ) = 2 ( 3 q 0 2 + ( 1 − q 0 2 ) − 1.5 ) = 4 q 0 2 − 1 ∴ ∣ q 0 ∣ = T r a c e ( M ) + 1 4 \begin{aligned}
Trace(M) & = 2(3q_0^2 + q_1^2 + q_2^2 + q_3^2 - 1.5) \\
& = 2(3q_0^2 + (1 - q_0^2) - 1.5) \\
& = 4q_0^2 - 1 \\ \\
& \therefore |q_0| = \sqrt{\frac{Trace(M) + 1}{4}}
\end{aligned} T r a c e ( M ) = 2 ( 3 q 0 2 + q 1 2 + q 2 2 + q 3 2 − 1 . 5 ) = 2 ( 3 q 0 2 + ( 1 − q 0 2 ) − 1 . 5 ) = 4 q 0 2 − 1 ∴ ∣ q 0 ∣ = 4 T r a c e ( M ) + 1
q 1 q_1 q 1 은 M 11 = 2 ( q 0 2 + q 1 2 − 0.5 ) M_{11} = 2(q_0^2 + q_1^2 - 0.5) M 1 1 = 2 ( q 0 2 + q 1 2 − 0 . 5 ) 임을 이용해 구할 수 있습니다.
M 11 = 2 ( q 0 2 + q 1 2 − 0.5 ) = 2 ( T r a c e ( M ) + 1 4 + q 1 2 − 0.5 ) \begin{aligned}
M_{11} & = 2(q_0^2 + q_1^2 - 0.5) \\ \\
& = 2\left(\frac{Trace(M) + 1}{4} + q_1^2 - 0.5\right) \\ \\
\end{aligned} M 1 1 = 2 ( q 0 2 + q 1 2 − 0 . 5 ) = 2 ( 4 T r a c e ( M ) + 1 + q 1 2 − 0 . 5 )
M 11 2 = T r a c e ( M ) + 1 4 + q 1 2 − 1 2 q 1 2 = M 11 2 + 1 − T r a c e ( M ) 4 ∴ ∣ q 1 ∣ = M 11 2 + 1 − T r a c e ( M ) 4 \begin{aligned}
\frac{M_{11}}{2} = \frac{Trace(M) + 1}{4} + q_1^2 - \frac{1}{2} \\ \\
q_1^2 = \frac{M_{11}}{2} + \frac{1 - Trace(M)}{4} \\ \\
\therefore |q_1| = \sqrt{\frac{M_{11}}{2} + \frac{1 - Trace(M)}{4}}
\end{aligned} 2 M 1 1 = 4 T r a c e ( M ) + 1 + q 1 2 − 2 1 q 1 2 = 2 M 1 1 + 4 1 − T r a c e ( M ) ∴ ∣ q 1 ∣ = 2 M 1 1 + 4 1 − T r a c e ( M )
같은 방법으로 M 22 M_{22} M 2 2 , M 33 M_{33} M 3 3 을 이용해 q 2 q_2 q 2 , q 3 q_3 q 3 를 구할 수 있습니다.
한편 쿼터니언 회전 행렬을 오일러 회전 행렬과 같게 두어 오일러 회전의 x x x , y y y , z z z 축에 대한 회전에 대응하는 사원수의 원소를 구할 수 있습니다. 아래는 z z z 축에 대해 ψ \psi ψ 만큼 회전하게 하는 행렬입니다.
M = [ c o s ψ − s i n ψ 0 s i n ψ c o s ψ 0 0 0 1 ] M = \begin{bmatrix}
cos\psi & -sin\psi & 0 \\
sin\psi & cos\psi & 0 \\
0 & 0 & 1
\end{bmatrix} M = ⎣ ⎢ ⎡ c o s ψ s i n ψ 0 − s i n ψ c o s ψ 0 0 0 1 ⎦ ⎥ ⎤
사원수의 원소 ∣ q 0 ∣ |q_0| ∣ q 0 ∣ 에 대한 식 ∣ q 0 ∣ = T r a c e ( M ) + 1 4 |q_0| = \sqrt{\frac{Trace(M) + 1}{4}} ∣ q 0 ∣ = 4 T r a c e ( M ) + 1 에 행렬의 T r a c e ( M ) = c o s ψ + c o s ψ + 1 Trace(M) = cos\psi + cos\psi + 1 T r a c e ( M ) = c o s ψ + c o s ψ + 1 을 대입하면 ∣ q 0 ∣ |q_0| ∣ q 0 ∣ 을 찾을 수 있습니다.
∣ q 0 ∣ = 2 c o s ψ + 2 4 = c o s ψ + 1 2 = c o s 2 ψ 2 − s i n 2 ψ 2 + 1 2 = c o s 2 ψ 2 = c o s ψ 2 \begin{aligned}
|q_0| & = \sqrt{\frac{2cos\psi + 2}{4}} \\ \\
& = \sqrt{\frac{cos\psi + 1}{2}} \\ \\
& = \sqrt{\frac{cos^2\frac{\psi}{2} - sin^2\frac{\psi}{2} + 1}{2}} \\ \\
& = \sqrt{cos^2\frac{\psi}{2}} \\ \\
& = cos\frac{\psi}{2}
\end{aligned} ∣ q 0 ∣ = 4 2 c o s ψ + 2 = 2 c o s ψ + 1 = 2 c o s 2 2 ψ − s i n 2 2 ψ + 1 = c o s 2 2 ψ = c o s 2 ψ
아래 식은 q 1 q_1 q 1 , q 2 q_2 q 2 , q 3 q_3 q 3 를 구하는 과정입니다.
∣ q 1 ∣ = M 11 2 + 1 − T r a c e ( M ) 4 = c o s ψ 2 + 1 − ( 2 c o s ψ + 1 ) 4 = 0 \begin{aligned}
|q_1| & = \sqrt{\frac{M_{11}}{2} + \frac{1 - Trace(M)}{4}} \\ \\
& = \sqrt{\frac{cos\psi}{2} + \frac{1 - (2cos\psi + 1)}{4}} \\ \\
& = 0
\end{aligned} ∣ q 1 ∣ = 2 M 1 1 + 4 1 − T r a c e ( M ) = 2 c o s ψ + 4 1 − ( 2 c o s ψ + 1 ) = 0
∣ q 2 ∣ = M 22 2 + 1 − T r a c e ( M ) 4 = c o s ψ 2 + 1 − ( 2 c o s ψ + 1 ) 4 = 0 \begin{aligned}
|q_2| & = \sqrt{\frac{M_{22}}{2} + \frac{1 - Trace(M)}{4}} \\ \\
& = \sqrt{\frac{cos\psi}{2} + \frac{1 - (2cos\psi + 1)}{4}} \\ \\
& = 0
\end{aligned} ∣ q 2 ∣ = 2 M 2 2 + 4 1 − T r a c e ( M ) = 2 c o s ψ + 4 1 − ( 2 c o s ψ + 1 ) = 0
∣ q 3 ∣ = M 33 2 + 1 − T r a c e ( M ) 4 = 1 2 + 1 − ( 2 c o s ψ + 1 ) 4 = 1 − c o s ψ 2 = 1 − ( c o s 2 ψ 2 − s i n 2 ψ 2 ) 2 = s i n 2 ψ 2 = s i n ψ 2 \begin{aligned}
|q_3| & = \sqrt{\frac{M_{33}}{2} + \frac{1 - Trace(M)}{4}} \\ \\
& = \sqrt{\frac{1}{2} + \frac{1 - (2cos\psi + 1)}{4}} \\ \\
& = \sqrt{\frac{1 - cos\psi}{2}} \\ \\
& = \sqrt{\frac{1 - (cos^2\frac{\psi}{2} - sin^2\frac{\psi}{2})}{2}} \\ \\
& = \sqrt{sin^2\frac{\psi}{2}} \\ \\
& = sin\frac{\psi}{2}
\end{aligned} ∣ q 3 ∣ = 2 M 3 3 + 4 1 − T r a c e ( M ) = 2 1 + 4 1 − ( 2 c o s ψ + 1 ) = 2 1 − c o s ψ = 2 1 − ( c o s 2 2 ψ − s i n 2 2 ψ ) = s i n 2 2 ψ = s i n 2 ψ
따라서 행렬 M = [ c o s ψ − s i n ψ 0 s i n ψ c o s ψ 0 0 0 1 ] M = \begin{bmatrix}
cos\psi & -sin\psi & 0 \\
sin\psi & cos\psi & 0 \\
0 & 0 & 1
\end{bmatrix} M = ⎣ ⎢ ⎡ c o s ψ s i n ψ 0 − s i n ψ c o s ψ 0 0 0 1 ⎦ ⎥ ⎤ 에 대응하는 사원수는 q = c o s ψ 2 + k s i n ψ 2 q = cos\frac{\psi}{2} + ksin\frac{\psi}{2} q = c o s 2 ψ + k s i n 2 ψ 입니다.
위의 변환과정을 활용해 오일러 회전에서의 roll (x x x 축 회전), pitch (y y y 축 회전), yaw (z z z 축 회전) 을 사원수의 곱으로 표현해 보겠습니다.
roll 회전각을 ϕ \phi ϕ , pitch 회전각을 θ \theta θ , yaw 회전각을 ψ \psi ψ 라 하면 아래와 같은 사원수의 곱을 얻습니다.
( c o s ψ 2 + k s i n ψ 2 ) ( c o s θ 2 + j s i n θ 2 ) ( c o s ϕ 2 + i s i n ϕ 2 ) = c o s ϕ 2 c o s θ 2 c o s ψ 2 + s i n ϕ 2 s i n θ 2 s i n ψ 2 + ( s i n ϕ 2 c o s θ 2 c o s ψ 2 − c o s ϕ 2 s i n θ 2 s i n ψ 2 ) i + ( c o s ϕ 2 s i n θ 2 c o s ψ 2 + s i n ϕ 2 c o s θ 2 s i n ψ 2 ) j + ( c o s ϕ 2 c o s θ 2 s i n ψ 2 + s i n ϕ 2 s i n θ 2 c o s ψ 2 ) k \begin{aligned}
& \left(cos\frac{\psi}{2} + k\text{ }sin\frac{\psi}{2}\right)
\left(cos\frac{\theta}{2} + j\text{ }sin\frac{\theta}{2}\right)
\left(cos\frac{\phi}{2} + i\text{ }sin\frac{\phi}{2}\right) \\
&= cos\frac{\phi}{2} cos\frac{\theta}{2} cos\frac{\psi}{2} + sin\frac{\phi}{2} sin\frac{\theta}{2} sin\frac{\psi}{2} + \\
& \left( sin\frac{\phi}{2} cos\frac{\theta}{2} cos\frac{\psi}{2} - cos\frac{\phi}{2} sin\frac{\theta}{2} sin\frac{\psi}{2} \right)i + \\
& \left( cos\frac{\phi}{2} sin\frac{\theta}{2} cos\frac{\psi}{2} + sin\frac{\phi}{2} cos\frac{\theta}{2} sin\frac{\psi}{2} \right)j + \\
& \left( cos\frac{\phi}{2} cos\frac{\theta}{2} sin\frac{\psi}{2} + sin\frac{\phi}{2} sin\frac{\theta}{2} cos\frac{\psi}{2} \right)k
\end{aligned} ( c o s 2 ψ + k s i n 2 ψ ) ( c o s 2 θ + j s i n 2 θ ) ( c o s 2 ϕ + i s i n 2 ϕ ) = c o s 2 ϕ c o s 2 θ c o s 2 ψ + s i n 2 ϕ s i n 2 θ s i n 2 ψ + ( s i n 2 ϕ c o s 2 θ c o s 2 ψ − c o s 2 ϕ s i n 2 θ s i n 2 ψ ) i + ( c o s 2 ϕ s i n 2 θ c o s 2 ψ + s i n 2 ϕ c o s 2 θ s i n 2 ψ ) j + ( c o s 2 ϕ c o s 2 θ s i n 2 ψ + s i n 2 ϕ s i n 2 θ c o s 2 ψ ) k
전개식은 어렵지 않게 유도할 수 있습니다.
roll, pitch, yaw 를 알고 있을 때 위 식을 통해 q q q 를 찾고 q q q 에 허수부의 부호를 달리한 q − 1 q^{-1} q − 1 을 찾습니다. 마지막으로 세 사원수의 곱 q v q − 1 qvq^{-1} q v q − 1 으로 벡터 v v v 에 대한 회전을 구합니다.
참고