사원수 계산기란?
사원수(quaternion)는 \(q = w + xi + yj + zk\) 형태로 표현하는 4차원 수입니다. 여기서 w는 스칼라(실수) 부분이고 (x, y, z)는 벡터(허수) 부분입니다. 사원수는 오일러 각에서 발생하는 짐벌 락(gimbal lock) 문제 없이 회전을 표현할 수 있어 3D 컴퓨터 그래픽스, 로보틱스, 항공우주, 물리학 등에서 널리 활용됩니다. 이 계산기는 두 사원수를 곱하고, 각 입력값의 노름과 첫 번째 사원수의 켤레까지 함께 보여 줍니다.
사용 방법
두 사원수 q1과 q2 각각에 대해 네 개의 성분(w, x, y, z)을 입력하세요. 계산기는 해밀턴 곱 q1 × q2를 새로운 사원수로, 두 입력값의 크기(노름), 그리고 q1의 켤레를 반환합니다. 사원수 곱셈은 교환법칙이 성립하지 않습니다. 일반적으로 q1 × q2 ≠ q2 × q1이므로 곱하는 순서가 중요합니다.
공식 풀이
해밀턴 곱은 스칼라 부분과 벡터 부분을 결합합니다. 스칼라 결과는 w₁w₂에서 두 벡터 부분의 내적(dot product)을 뺀 값입니다. 벡터 결과는 w₁v₂ + w₂v₁에 외적(cross product) v₁ × v₂를 더한 값입니다. 노름은 유클리드 길이 \(\sqrt{w^{2}+x^{2}+y^{2}+z^{2}}\)이며, 켤레는 단순히 벡터 성분의 부호를 바꾼 것입니다: \(q^{*} = (w, -x, -y, -z)\).
$$\begin{gathered} q_1 q_2 = (w_1 w_2 - x_1 x_2 - y_1 y_2 - z_1 z_2) + (w_1 x_2 + x_1 w_2 + y_1 z_2 - z_1 y_2)\,i \\ + (w_1 y_2 - x_1 z_2 + y_1 w_2 + z_1 x_2)\,j + (w_1 z_2 + x_1 y_2 - y_1 x_2 + z_1 w_2)\,k \\[1.5em] \text{where}\quad \left\{ \begin{aligned} q_1 &= \text{w}_1 + \text{x}_1\,i + \text{y}_1\,j + \text{z}_1\,k \\ q_2 &= \text{w}_2 + \text{x}_2\,i + \text{y}_2\,j + \text{z}_2\,k \end{aligned} \right. \end{gathered}$$
$$q_1^{*} = \text{w}_1 - \text{x}_1\,i - \text{y}_1\,j - \text{z}_1\,k$$
$$\lVert q_1 \rVert = \sqrt{\text{w}_1^{2} + \text{x}_1^{2} + \text{y}_1^{2} + \text{z}_1^{2}}$$
$$\lVert q_2 \rVert = \sqrt{\text{w}_2^{2} + \text{x}_2^{2} + \text{y}_2^{2} + \text{z}_2^{2}}$$
계산 예시
q1 = (1, 2, 3, 4), q2 = (5, 6, 7, 8)이라고 하겠습니다. 스칼라 부분은 \(1\cdot5 - 2\cdot6 - 3\cdot7 - 4\cdot8 = 5 - 12 - 21 - 32 = -60\)입니다. i 부분은 \(1\cdot6 + 2\cdot5 + 3\cdot8 - 4\cdot7 = 6 + 10 + 24 - 28 = 12\)입니다. j 부분은 \(1\cdot7 - 2\cdot8 + 3\cdot5 + 4\cdot6 = 7 - 16 + 15 + 24 = 30\)입니다. k 부분은 \(1\cdot8 + 2\cdot7 - 3\cdot6 + 4\cdot5 = 8 + 14 - 18 + 20 = 24\)입니다. 따라서 \(q_1 \times q_2 = (-60, 12, 30, 24)\)가 됩니다.
자주 묻는 질문
사원수 곱셈은 교환법칙이 성립하나요? 아닙니다. 외적 항 때문에 q1 × q2는 일반적으로 q2 × q1과 다릅니다.
단위 사원수(unit quaternion)란 무엇인가요? 노름이 1인 사원수입니다. 단위 사원수는 3D 공간에서 순수한 회전을 나타냅니다.
벡터를 어떻게 회전시키나요? 벡터를 w = 0인 사원수로 두고 \(q \cdot v \cdot q^{*}\)를 계산하면 됩니다. 여기서 q는 회전을 인코딩한 단위 사원수입니다.