쿼터니언
쿼터니언(Quaternion)은 3차원 공간에서의 회전을 표현하는 데 사용되는 수학적 개념입니다. 실수부 하나와 3개의 허수부로 구성되어 있어서 총 4개의 성분을 가지고 있습니다.
쿼터니언 q는 다음과 같이 표현됩니다: q = w + xi + yj + zk
여기서:
- w는 실수부 (스칼라 부분)
- x, y, z는 허수부 (벡터 부분)
- i, j, k는 허수 단위
간단한 예시를 통해 설명해드리겠습니다:
쿼터니언이 주로 사용되는 분야:
- 3D 그래픽스와 게임 개발
- 로보틱스와 드론 제어
- 우주선의 자세 제어
- 가상/증강 현실(VR/AR)
쿼터니언은 오일러 각(Euler angles)과 비교했을 때 다음과 같은 장점이 있습니다:
- 짐벌 락(Gimbal lock) 현상을 피할 수 있음
- 연속적인 회전 보간이 더 자연스러움
- 수치적으로 더 안정적임
짐벌 락(Gimbal Lock) 현상을 자세히 설명해드리겠습니다.
짐벌 락은 3차원 회전을 오일러 각으로 표현할 때 발생하는 문제입니다. 이것은 두 회전축이 나란해지면서(평행해지면서) 한 자유도를 잃어버리는 현상을 말합니다.
실제 예시를 통해 설명하겠습니다:
https://claude.site/artifacts/93507bbf-1d39-45bd-8e6d-f3456e29c81c
짐벌 락이 발생하는 과정을 단계별로 설명하겠습니다:
- 짐벌 시스템의 기본 구조
- 세 개의 회전축(X, Y, Z)이 서로 수직을 이루고 있음
- 각 축은 독립적으로 회전할 수 있음
- 각 회전은 다른 회전축에 영향을 줌
- 짐벌 락이 발생하는 상황
- 두 번째 짐벌을 90도 회전시키면, 첫 번째와 세 번째 회전축이 평행해짐
- 이때 두 축이 같은 방향으로 회전하게 되어 한 자유도를 잃게 됨
- 결과적으로 특정 방향으로의 회전이 불가능해짐
- 실제 영향
- 항공기 제어 시스템에서 "피치"가 90도가 되면 "롤"과 "요"가 같은 축으로 합쳐짐
- 3D 애니메이션에서 특정 자세에서 자연스러운 회전이 불가능해짐
- 로봇 팔의 관절이 특정 각도에서 움직임이 제한됨
- 해결 방법
- 쿼터니언 사용: 4개의 성분을 사용하여 회전을 표현함으로써 짐벌 락 방지
- 회전 순서 최적화: 짐벌 락이 발생하지 않는 회전 순서 선택
- 추가 회전축 도입: 여분의 자유도를 추가하여 문제 해결
- 실제 응용 분야에서의 중요성
- 비행 시뮬레이터
- 우주선 자세 제어
- 로봇 공학
- 3D 그래픽스와 게임 개발
- VR/AR 헤드셋의 방향 추적
이러한 짐벌 락 현상은 오일러 각을 사용할 때의 근본적인 한계점이며, 이것이 많은 3D 응용 프로그램에서 쿼터니언을 선호하는 주요 이유입니다. 쿼터니언은 모든 가능한 방향을 표현할 수 있으며, 연속적인 회전에서도 안정적인 결과를 제공합니다.
위의 데모에서 슬라이더를 움직여보시면, Y축 회전이 90도에 가까워질수록 외부(파란색)와 내부(초록색) 짐벌이 같은 평면상에 놓이게 되어 회전축이 겹치는 현상을 관찰하실 수 있습니다.
- 오일러 각에서 쿼터니언으로 변환
- 각 축별 회전을 개별 쿼터니언으로 변환
- 변환 공식:
Copyw = cos(angle/2) x = ax * sin(angle/2) y = ay * sin(angle/2) z = az * sin(angle/2)
- 쿼터니언 곱셈
- 두 회전을 결합할 때 사용
- 교환법칙이 성립하지 않음 (순서가 중요)
- 공식:
Copyw = w1*w2 - x1*x2 - y1*y2 - z1*z2 x = w1*x2 + x1*w2 + y1*z2 - z1*y2 y = w1*y2 - x1*z2 + y1*w2 + z1*x2 z = w1*z2 + x1*y2 - y1*x2 + z1*w2
- 쿼터니언 켤레복소수(Conjugate)
- q = w + xi + yj + zk의 켤레는 q* = w - xi - yj - zk
- 벡터 회전에 사용됨
- 쿼터니언 역수(Inverse)
- q^(-1) = q* / (w² + x² + y² + z²)
- 회전을 되돌리는 데 사용
- 벡터 회전
- 벡터 v를 쿼터니언 q로 회전: q * v * q^(-1)
- 여기서 v는 순수 쿼터니언(w=0)으로 취급
쿼터니언의 주요 장점들:
- 연속적인 회전에서 보간이 자연스러움
- 수치적으로 안정적
- 메모리 효율적 (4개의 수로 3D 회전 표현)
- 짐벌 락 문제가 없음
쿼터니언은 직관적으로 이해하기는 어려울 수 있지만, 3D 회전을 다룰 때 매우 강력한 도구입니다. 특히 여러 회전을 연속적으로 적용할 때 오일러 각보다 훨씬 안정적인 결과를 제공합니다.