1. 개요[편집]
| 사원수 Quaternion | |
|---|---|
| 분야 | 대수학 × 컴퓨터 그래픽스 × 로보틱스 |
| 발견 | 윌리엄 로원 해밀턴 (1843) |
| 구성 | 실수부 1개 + 허수부 3개 ($i, j, k$) |
| 대표 용도 | 3D 회전, 자세 추정, 모션 캡처 |
| 대표 연산 | SLERP(구면 선형 보간) |
— 이 한 줄을 다리 난간에 칼로 새긴 남자가 있었다.
사원수(四元數, Quaternion)는 하나의 실수부와 세 개의 허수부()로 이루어진 4차원 수 체계로, 3차원 공간의 회전을 짐벌락 없이 표현하는 데 쓰이는 그래픽스·로보틱스의 국룰 도구이다. 일반적으로 또는 스칼라-벡터 쌍 로 쓰며, 특히 크기가 1인 단위 사원수(unit quaternion)가 회전을 표현한다.
복소수가 2차원 평면의 회전을 우아하게 표현하듯, 사원수는 3차원 회전을 표현한다. 오일러각(Euler angle)의 짐벌락 지옥과 회전행렬의 9개 성분 낭비 사이에서, 사원수는 4개의 숫자로 회전을 담아내는 절묘한 타협점이다. 게임 엔진의 캐릭터 뼈대, 드론의 자세 제어기, 우주선의 항법 컴퓨터가 전부 이 4개짜리 숫자 뭉치를 굴리고 있다.
2. 역사[편집]
1843년 10월 16일, 아일랜드의 수학자 윌리엄 로원 해밀턴(William Rowan Hamilton)은 아내와 함께 더블린의 브로엄 다리(Broom Bridge)를 건너다가 3차원 수 체계의 곱셈 문제를 순간적으로 깨달았다.1 흥분한 그는 들고 있던 주머니칼로 다리 난간에 저 유명한 곱셈 규칙을 새겼다. 지금도 그 자리에는 기념 명판이 붙어 있고, 매년 수학자들이 순례하듯 찾아온다.
해밀턴은 남은 인생 20년을 사원수에 갈아 넣었지만, 정작 후대의 물리학자들은 깁스와 헤비사이드가 정리한 벡터 대수를 더 선호했다. 사원수는 한동안 “복잡하기만 한 유물” 취급을 받으며 잊혀지는 듯했다. 그러다 20세기 후반 컴퓨터 그래픽스와 로보틱스가 3D 회전을 대량으로 계산해야 하는 시대가 오자, 짐벌락 없고 보간이 매끄러운 사원수가 화려하게 부활했다. 죽어서 이름을 남긴 게 아니라, 죽고 100년 뒤에 GPU 안에서 부활한 셈이다.
3. 대수 구조[편집]
사원수의 곱셈은 다음 기본 규칙에서 전부 유도된다.
이로부터 , , 이고, 순서를 바꾸면 부호가 뒤집힌다(). 즉 사원수 곱셈은 교환법칙이 성립하지 않는다(). 이건 버그가 아니라 기능이다 — 3차원 회전 자체가 순서에 의존하기 때문에, 곱셈이 비가환이어야 회전 합성을 올바르게 표현할 수 있다.
두 사원수 , 의 곱은 스칼라-벡터 형식으로 이렇게 쓴다.
켤레(conjugate)는 , 크기는 이며, 단위 사원수의 역원은 곧 켤레와 같다(). 이 성질 덕분에 회전의 역회전을 구하는 데 나눗셈 없이 부호만 뒤집으면 된다.
4. 회전 표현[편집]
축 (단위 벡터) 둘레로 각 만큼 회전하는 것은 다음 단위 사원수로 표현된다.
여기서 각을 가 아니라 로 쓰는 게 핵심이자 함정이다. 벡터 를 회전시키려면 그 벡터를 허수부에 넣은 사원수 를 양쪽에서 감싼다.
이 “샌드위치 곱”이 벡터를 정확히 축 둘레로 만큼 돌린다. 반각()이 두 번 곱해지면서 온각이 되는 구조다. 참고로 와 는 정확히 같은 회전을 나타낸다(이중 덮개, double cover). 그래서 사원수 공간은 단순히 회전 하나에 하나가 아니라 둘씩 대응한다.2
5. 오일러각·회전행렬과의 비교[편집]
3D 회전을 표현하는 세 가지 대표 방식의 장단점은 다음과 같다.
| 표현 | 저장 크기 | 짐벌락 | 보간 | 합성 비용 |
|---|---|---|---|---|
| 오일러각 | 3개 | 발생 | 나쁨 | 중간 |
| 회전행렬 | 9개 | 없음 | 어려움 | 큼 |
| 사원수 | 4개 | 없음 | 매끄러움(SLERP) | 작음 |
오일러각(롤-피치-요)은 사람이 읽기엔 직관적이지만, 두 회전축이 한 줄로 겹치면 자유도 하나가 통째로 사라지는 짐벌락(gimbal lock)이 발생한다. 아폴로 우주선의 관성항법장치가 이 문제로 유명한 경고를 냈고, 게임에서 카메라가 수직으로 올려다볼 때 갑자기 홱 돌아가는 것도 같은 원인이다. 회전행렬은 짐벌락이 없지만 9개 성분 중 독립 자유도는 3개뿐이라 낭비가 심하고, 부동소수점 오차가 쌓이면 직교성이 깨져 재정규화(Gram-Schmidt)를 해줘야 한다. 사원수는 4개만 저장하고 정규화도 나눗셈 한 번이면 끝난다.
6. SLERP: 구면 선형 보간[편집]
사원수가 게임과 애니메이션에서 사랑받는 결정적 이유는 두 회전 사이를 매끄럽게 이어주는 SLERP(Spherical Linear intERPolation, 구면 선형 보간)다. 두 단위 사원수 , 사이를 매개변수 로 보간한다.
여기서 는 두 사원수 사이의 각으로 이다. SLERP는 4차원 단위 초구(hypersphere) 위의 최단 호(great arc)를 일정한 각속도로 따라간다. 즉 캐릭터의 팔이 한 자세에서 다른 자세로 넘어갈 때 등속으로 회전해 자연스러워 보인다. 오일러각을 그냥 선형 보간하면 중간에 속도가 출렁이거나 엉뚱한 경로로 돌아가는데, SLERP는 그런 사고가 없다.3 성능이 중요하면 정규화 후 선형 보간하는 NLERP로 근사하기도 하는데, 각속도가 살짝 일정하지 않은 대신 훨씬 싸다.
7. 활용[편집]
- 게임 엔진: 캐릭터 스켈레톤의 각 관절 회전, 카메라 자세, 물리 엔진의 강체 동역학에서 강체의 방향을 전부 사원수로 저장한다. 역운동학이나 모션 캡처 데이터의 블렌딩도 SLERP 위에서 돌아간다.
- 로보틱스·항공우주: 드론·로봇 팔의 관절 자세, 위성의 자세 제어(attitude control)에서 짐벌락 회피가 생명이라 사원수가 표준이다.
- 자세 추정(AHRS): IMU(자이로·가속도계·지자기계) 센서 융합에서 매딕(Madgwick)·마호니(Mahony) 필터, 확장 칼만 필터가 상태 변수로 사원수를 굴린다. 짐벌락 없이 오차를 누적 없이 관리할 수 있어서다.
8. 관련 문서[편집]
9. Footnotes[편집]
-
해밀턴은 2차원 복소수를 3차원으로 확장하려고 10년 넘게 씨름했는데, 세 개의 수로는 곱셈이 안 닫혔다. 어느 날 “3개가 아니라 4개면 되잖아?”라는 깨달음이 다리 위에서 벼락처럼 왔다. 아들들이 매일 아침 “아빠, 세 쌍 곱셈 할 수 있게 됐어요?”라고 물었다는 일화가 유명하다. 그날 아침엔 “이제 된다”고 답할 수 있었다. ↩
-
이 이중 덮개 성질 때문에 사원수 보간 코드에서 이면 한쪽 부호를 뒤집어(negate) 최단 경로를 타게 만드는 게 국룰이다. 이걸 빼먹으면 캐릭터가 짧은 길 놔두고 지구 반 바퀴 돌아서 회전하는 참사가 난다. ↩
-
SLERP의 가 분모에 있어서 두 사원수가 거의 같으면() 0으로 나누기 폭발이 난다. 실무 코드는 이 경우 그냥 선형 보간으로 폴백한다. 엣지 케이스 처리 안 하면 딱 이런 데서 NaN이 터진다. ↩