회전행렬

편집 역사 토론
수치해석 컴퓨터 그래픽스 마지막 수정: 2026-07-20 04:25:47

1. 개요[편집]

회전행렬
Rotation Matrix
정의직교행렬 & 행렬식 +1
이루는 군특수직교군 SO(n)
자유도(3D)3
역행렬전치와 동일 ($R^{-1} = R^{\mathsf T}$)
대안 표현사원수, 오일러각, 축-각

회전행렬(rotation matrix)은 벡터의 길이와 벡터 사이 각을 보존하면서 좌표계나 물체를 회전시키는 선형 변환을 나타내는 정사각 행렬로, **직교행렬이면서 행렬식이 +1+1**인 것으로 정의된다. 이 두 조건을 만족하는 n×nn \times n 행렬 전체는 특수직교군(special orthogonal group) SO(n)SO(n)을 이루며, 3차원 회전을 다루는 SO(3)SO(3)강체 동역학컴퓨터 그래픽스의 주역이다.

직교 조건 RTR=IR^{\mathsf T} R = I는 회전이 벡터의 내적을 보존함을, 즉 길이와 각도를 유지함을 뜻한다.1 여기에 detR=+1\det R = +1을 더하면 반사(거울상)를 배제하고 오른손 좌표계의 방향(orientation)까지 지킨다. detR=1\det R = -1인 직교행렬은 반사가 섞인 것이라 회전이 아니다. 이 깔끔한 대수 구조 덕분에 회전행렬은 역행렬이 곧 전치라는 어마어마한 계산상 이점을 공짜로 얻는다.

2. 대수적 성질[편집]

회전행렬 RSO(3)R \in SO(3)이 가진 성질들은 실전에서 그대로 무기가 된다.

  • 직교성: RTR=RRT=IR^{\mathsf T} R = R R^{\mathsf T} = I. 따라서 R1=RTR^{-1} = R^{\mathsf T}. 역회전이 전치 한 번으로 끝나니 LU 분해 같은 것을 부를 일이 없다.
  • 행렬식: detR=1\det R = 1. 부피와 방향을 보존한다.
  • 고유값: 3D 회전행렬은 항상 고유값 11을 하나 가지며, 그 고유벡터가 바로 회전축이다. 나머지 두 고유값은 e±iθe^{\pm i\theta}로, θ\theta가 회전각이다. 오일러의 회전 정리(임의의 3D 회전은 하나의 축 둘레 회전과 같다)가 고유값 문제의 언어로 여기 박혀 있다.
  • 트레이스: tr(R)=1+2cosθ\operatorname{tr}(R) = 1 + 2\cos\theta. 행렬에서 회전각을 즉시 뽑는 공식이다.
  • 군 구조: 회전의 합성은 행렬 곱이고, 행렬 곱은 교환법칙이 성립하지 않는다. 그래서 3D 회전은 순서에 민감하다. x축으로 돌린 뒤 y축으로 돌린 것과 그 반대는 다른 결과를 준다.2

3. 축-각과 지수 사상[편집]

회전을 축 n^\hat{\mathbf{n}}과 각 θ\theta로 표현하는 축-각(axis–angle) 방식은 회전행렬과 지수 사상으로 이어진다. 반대칭 행렬 [n^]×[\hat{\mathbf{n}}]_\times(외적을 행렬로 쓴 것)에 대해 회전행렬은

R=exp ⁣(θ[n^]×)=I+sinθ[n^]×+(1cosθ)[n^]×2R = \exp\!\big(\theta\,[\hat{\mathbf{n}}]_\times\big) = I + \sin\theta\,[\hat{\mathbf{n}}]_\times + (1-\cos\theta)\,[\hat{\mathbf{n}}]_\times^{2}

로 닫힌 꼴이 나온다. 이것이 로드리게스 회전 공식(Rodrigues’ rotation formula)이다.3 반대칭 행렬 전체가 이루는 리 대수 so(3)\mathfrak{so}(3)가 지수 사상을 통해 회전군 SO(3)SO(3)로 대응된다는, 리 군 이론의 교과서적 예시이기도 하다. 강체 동역학에서 각속도 ω\boldsymbol\omega가 자세를 시간에 따라 굴리는 식

R˙=[ω]×R\dot R = [\boldsymbol\omega]_\times\, R

역시 이 구조에서 곧장 나온다.

4. 회전 표현법 비교[편집]

3D 회전을 표현하는 방식은 회전행렬 말고도 여럿이고, 각자 장단이 뚜렷하다. 무엇을 쓸지는 용도가 결정한다.

표현성분 수강점약점
회전행렬9벡터 변환이 곧 행렬곱, 합성이 명료성분 과잉, 정규직교성 유지 부담
오일러각3직관적, 사람이 읽기 쉬움짐벌 락, 순서 의존
사원수4컴팩트, 보간 우수, 특이점 없음부호 이중성, 직관 부족
축-각3~4물리적 해석 직관적합성 불편

정리하면 이렇다. 화면에 벡터를 실제로 변환할 때는 회전행렬이 GPU 파이프라인과 궁합이 좋아 결국 행렬로 귀결된다. 사람이 값을 입력하는 자세 설정에는 오일러각이 편하지만 짐벌 락 위험을 안는다. 부드러운 보간과 누적이 중요한 스켈레탈 애니메이션·역운동학·자세 추정에서는 사원수가 사실상 표준이다. 그래서 실무 엔진은 내부적으로 사원수로 자세를 들고 다니다가, 렌더링 직전에 회전행렬로 변환하는 하이브리드 전략을 쓴다.4

5. 수치적 주의점과 직교화[편집]

부동소수점 회전행렬을 여러 번 곱하면 반올림 오차가 누적되어 RTR=IR^{\mathsf T} R = I가 슬금슬금 깨진다. 방치하면 물체가 미묘하게 늘어나거나 찌그러진다(스케일 오염). 이를 되돌리는 것이 **재직교화(re-orthonormalization)**로, 가장 정통적인 방법은 특이값 분해를 써서 R=UΣVTR = U\Sigma V^{\mathsf T}의 특이값을 전부 1로 강제해 가장 가까운 직교행렬 UVTUV^{\mathsf T}를 얻는 것이다. 가벼운 대안으로는 QR 분해나 그람–슈미트 정규직교화, 사원수로 변환 후 정규화하는 방법이 있다.

행렬로부터 각 표현을 역으로 추출할 때도 조심해야 한다. 트레이스로 각을 구할 때 θ0\theta \approx 0이나 θπ\theta \approx \pi 근처에서 수치가 불안정해지므로, 실무에서는 atan2를 활용하거나 사원수 경유 변환을 쓴다. 주성분 분석이나 강체 정합(rigid registration)에서도 최적 회전을 SVD로 구하는 코사인 문제(Kabsch 알고리즘)가 등장하는데, 여기서도 det=+1\det = +1을 강제해 반사 해를 걸러내는 것이 핵심이다.

6. 관련 문서[편집]

7. Footnotes[편집]

  1. 직교행렬은 내적을 보존한다: (Ru)(Rv)=uTRTRv=uTv=uv(Ru)\cdot(Rv) = u^{\mathsf T} R^{\mathsf T} R v = u^{\mathsf T} v = u\cdot v. 길이는 v=uv=u인 특수 경우다. 즉 회전은 도형을 안 늘이고 안 찌그러뜨리는 “합동 변환”의 방향 보존 버전.

  2. 회전의 비가환성은 직접 실험으로 확인할 수 있다. 책을 x축으로 90도, 그다음 y축으로 90도 돌린 것과, 순서를 바꾼 것은 표지가 다른 방향을 본다. 3D 회전이 짜증나는 근본 원인이자, SO(3)SO(3)이 비아벨 군인 이유.

  3. 로드리게스 공식은 1840년경 올랭드 로드리게스가 유도했다. [n^]×3=[n^]×[\hat{\mathbf n}]_\times^3 = -[\hat{\mathbf n}]_\times라는 성질 덕에 지수의 무한급수가 sin·cos 두 항으로 딱 접힌다. 사원수와 본질적으로 같은 정보를 담고 있다.

  4. “왜 우리 캐릭터 목이 특정 각도에서 홱 돌아가죠?”의 8할은 오일러각 짐벌 락이고, “왜 팔이 길게 늘어나죠?”의 8할은 회전행렬 재직교화를 안 해서다. 그래서 자세는 사원수로 들고, 보간도 사원수(slerp)로 하고, 마지막에만 행렬로 굽는다.