- 3D 회전은 표현 방식마다 강점이 달라서, 점 변환에는 회전 행렬이 편하지만 보간·합성·평균에는 별도 도구가 필요함
- Euler angles는 사람이 다루기 쉽지만 gimbal lock, 비상수 각속도, 최단 경로를 놓치는 선형 보간 문제가 생길 수 있음
- 단위 quaternion은 slerp로 일정 속도 최단 경로 보간을 제공하지만, 벡터 공간이 아니어서 직접 저작·스칼라 곱·평균이 직관적이지 않음
- 지수/로그 맵은 axis/angle 벡터와 회전 행렬을 연결해
R(t) = exp(t log(R1 R0^-1)) R0형태의 2D·3D 최단 경로 보간을 구성함 - 여러 회전의 평균은 단순 axis/angle 평균만으로는 catastrophic cancellation이 생길 수 있으며, Karcher mean은 각거리 제곱합을 최소화하는 회전을 반복적으로 찾아 더 일관된 결과를 냄
회전 표현별 장단점
- 3D 회전에는 여러 표현이 있고, 변환·저작·보간·평균 중 무엇을 하느냐에 따라 적합한 선택이 달라짐
-
회전 행렬
- 가장 직접적인 선형대수 표현은 양의 행렬식을 가진 orthonormal 3x3 matrix임
- 회전 행렬의 세 열은 회전 후 x, y, z 축이 어디로 이동하는지 나타냄
- 점 변환은 행렬 곱으로 처리할 수 있고, 다른 선형 변환과도 행렬 곱으로 합성 가능함
- 화면에 그릴 때 회전 행렬을 쓰는 이유는 world-space에서 screen으로 점을 옮기는 데 하나의 행렬 곱만 필요하기 때문임
- 회전 행렬은 벡터 공간이 아니므로 두 회전 행렬을 더해도 다시 회전 행렬이 되지 않음
- 두 회전 행렬을 선형 보간하면 회전뿐 아니라 scaling이 섞일 수 있음
-
Euler angles
- Euler angles는 x, y, z 축에 대한 세 회전을 지정하며 pitch, yaw, roll로도 불림
- 세 구성 회전의 적용 순서는 관례에 따라 달라지고, 예시는 x, y, z 순서를 사용함
- 사람이 이해하기 쉽고 회전 저작에 자주 쓰이지만, 단순 보간은 원치 않는 결과를 만들 수 있음
- 한 구성 회전 때문에 나머지 두 회전축이 평행해지는 gimbal lock은 singularity에 해당함
- singularity에서는 잠긴 두 각도 중 어느 쪽을 바꿔도 같은 출력 회전을 만들 수 있음
- 보간 경로가 singularity에 도달하면 현재 위치를 표현하는 자유도가 늘어나고, 임의 표현을 골라 이어갈 때 출력 보간이 불연속이 될 수 있음
- 각 구성 각도가 cyclic이기 때문에 선형 보간이 항상 두 회전 사이의 최단 경로를 고르지는 못함
- 경로가 singularity를 지나지 않으면 보간은 매끄럽고, “straight up”과 “straight down”을 표현할 필요가 없다면 한계를 우회할 수 있음
-
Quaternions
- 단위 quaternion은 회전 합성과 보간의 표준 도구로 쓰임
- spherical linear interpolation, 즉 slerp는 두 quaternion 사이의 일정 속도 최단 경로를 선택함
- 단위 quaternion도 벡터 공간이 아니며, 사람이 직접 저작하기 어렵고 보간 계산 비용이 들 수 있음
- 스칼라 곱이나 평균에 대한 직관적 개념도 부족함
- quaternion은 회전 공간을 double-cover하므로 경우에 따라
Q(1)이-Q1으로 갈 수 있음
-
Axis/angle
- axis/angle 회전은 실수 3D 벡터로 표현됨
- 벡터의 방향은 회전축을, 크기는 그 축에 대한 회전 각도를 지정함
θu로 쓰며,u는 단위 벡터이고θ는 회전 각도임- 3D 벡터이므로 벡터 공간을 이루며 더하기, 스케일링, 보간이 가능함
- 두 axis/angle 회전을 선형 보간하면 매끄럽고 일정한 각속도를 줄 수 있음
- 다만 목표 회전을 어떤 axis/angle 표현으로 지정하느냐에 따라 선형 보간이 최단 경로를 고르지 못할 수 있음
- quaternion처럼 axis/angle 벡터도 회전 공간을 double-cover함
지수 맵과 로그 맵
- 여러 회전 표현을 목적에 맞게 오갈 수 있으면 표현별 장점을 함께 사용할 수 있음
- 최종 변환에는 회전 행렬이 필요하므로 행렬을 canonical form으로 둠
- exponential map은 회전 객체를 받아 동등한 회전 행렬을 반환하는 함수임
- logarithmic map은 회전 행렬을 받아 회전 객체로 되돌리는 대응 함수임
- 여기서는 회전 행렬과 axis/angle 벡터 사이를 오가는
exp와log맵을 다룸
2D axis/angle에서 출발하는 직관
- 2D에서는 회전축이 평면 밖을 향하는 하나뿐이므로 axis/angle 회전은 각도
θ하나로 표현 가능함 - 2D 점
p를θ만큼 회전한pθ는 다음처럼 쓸 수 있음pθ = p cosθ + Jp sinθJ는 2D 벡터를 90도 회전시키는 행렬임
J는[[0, -1], [1, 0]]이고,J² = -I이므로 두 번 적용하면 180도 회전이 됨- 이 식을 전개하면 표준 2D 회전 행렬
[[cosθ, -sinθ], [sinθ, cosθ]]가 나옴
2D 지수 맵과 로그 맵
- 복소수의 Euler 공식
e^(iθ) = cosθ + i sinθ에서i가 quarter turn 역할을 하듯, 2D 행렬 식에서는J가 같은 역할을 함 - 지수 함수의 Taylor series에 행렬
A = θJ를 넣으면 행렬 덧셈, 곱셈, 스케일링으로 같은 계산을 수행할 수 있음 - 전개 결과
sinθ와cosθ의 Taylor series가 나타나며 다음 식을 얻음e^(θJ) = [[cosθ, -sinθ], [sinθ, cosθ]]
- 따라서 2D 지수 맵은 각도
θ를 대응하는 회전 행렬로 변환함 - 로그 맵은 지수 맵의 역으로 정의됨
R = exp(θJ)이면log(R) = θJθ = atan2(R21, R11)로 복원 가능함
- 지수 맵은 injective가 아님
exp(θJ) = exp((θ + 2π)J)이므로 한 바퀴를 더해도 같은 회전 행렬이 됨- 로그 맵은 해당 회전 행렬에 대응하는 가장 작은 각도를 반환하도록 정의함
atan2가 이 정의를 구현함
exp/log 기반 보간
- 두 2D 회전 각도
θ0,θ1을 단순 선형 보간한 뒤 회전 행렬을 만들 수 있음 - 그러나
θ0와θ1이π보다 멀리 떨어져 있으면 각도의 cyclic 성질을 반영하지 못해 긴 경로를 택함 - exp/log 기반 보간은 두 회전 행렬
R0,R1에서 직접 이동 회전을 계산함R1 R0^-1은 먼저R0를 되돌리고R1을 적용하는 회전임log(R1 R0^-1)은R0에서R1로 가는 가장 작은 각도를 제공함- 이 axis/angle 회전을
t로 스케일한 뒤exp로 다시 행렬로 바꿈
- 최종 보간식은 다음과 같음
R(t) = exp(t log(R1 R0^-1)) R0R(0) = R0,R(1) = R1
- 2D에서는 각도 차이를 직접 확인해도 되지만, 이 방식은 수정 없이 3D와 임의 차원으로 일반화됨
3D axis/angle과 skew-symmetric matrix
- 3D에서도 axis/angle
θu를 지수화해 회전 행렬을 만들 수 있음 - 핵심은 단위 벡터
u를 축으로 하는 quarter turn 변환을 찾는 데 있음 - cross product
u × p는u와p가 만드는 평면에 수직인 벡터로 정의되지만,p를u에 수직인 평면에 투영한p⊥의 quarter turn으로도 해석할 수 있음 u × p와 같은 결과를 내는 행렬û를 만들 수 있음û = [[0, -uz, uy], [uz, 0, -ux], [-uy, ux, 0]]ûp = u × p
ûᵀ = -û이므로û는 skew-symmetric matrix임- 2D의
J도 skew-symmetric이고 2D cross product를 나타내므로 같은 구조가 이어짐 - skew-symmetric matrix의 합과 스칼라 곱도 skew-symmetric이어서 axis/angle 벡터 공간 성질이 이 행렬 표현에서도 유지됨
û^(k+2) = -û^k라는 항등식은 cross product를 세 번 적용하면p⊥를 세 번 quarter turn시켜 음의 quarter turn과 같다는 기하학적 해석에서 나옴
3D 지수 맵: Rodrigues’ formula
- axis/angle 회전
θu에서θû를 만들고 지수화하면 3D 회전 행렬을 얻음 - Taylor series와
û^(k+2) = -û^k를 사용하면 다음 식이 도출됨e^(θû) = I + sin(θ)û + (1 - cos(θ))û²
- 이 식은 Rodrigues’ formula로 알려져 있음
θ = 0이면e^(0û)p = p가 되어 점이 그대로 유지됨θ = π/2이면u × p + p∥가 되어 quarter rotation이 됨θ = π이면-p⊥ + p∥가 되어 half rotation이 됨- 이 행렬은 orthonormal임
AᵀA = I조건을ûᵀ = -û와û^(k+2) = -û^k로 확인함
- 행렬식은
θ = 0에서 1이고, 행렬식이 0이 되는 경우가 없으며,exp가θ와û에 대해 연속이므로 음수가 될 수 없음 - 따라서
exp(θû)는 3D 회전 행렬임
3D 로그 맵
- 3D 지수 맵도 injective가 아니므로 3D 로그 맵은 주어진 행렬에 대응하는 가장 작은 크기의 axis/angle 회전을 반환하도록 정의함
R = exp(θû) = I + sin(θ)û + (1 - cos(θ))û²에서 trace를 취하면 회전 각도를 구할 수 있음- trace는 대각합임
tr(I) = 3û는 skew-symmetric이므로 대각합이 0임tr(û²) = -2임- 따라서
tr(R) = 1 + 2cosθ θ = arccos((tr(R) - 1) / 2)
- 회전축은
R을 antisymmetrize해서 복원함R - Rᵀ = 2 sin(θ)ûû = (R - Rᵀ) / (2 sinθ)u = 1/(2 sinθ) [R32 - R23, R13 - R31, R21 - R12]ᵀ
- 이렇게 3D 회전 행렬에서 axis/angle로 돌아가는 전체 로그 맵이 완성됨
3D 보간의 결과
- 3D에서도 2D와 같은 보간식이 그대로 적용됨
R(t) = exp(t log(R1 R0^-1)) R0
- 이 보간은 axis/angle 회전의 장점을 유지하면서 항상 최단 경로를 선택함
- Euler angles로는 같은 예제가 매끄럽게 보이지 않을 수 있음
여러 회전의 평균
- quaternion을 쓰면 좋은 보간을 얻을 수 있어 exp/log 행렬 수학 없이도 보간 문제는 해결 가능함
- axis/angle 회전으로 더 쉽게 할 수 있는 작업 중 하나가 여러 회전 행렬의 평균임
- 가장 단순한 방법은 각 행렬을 axis/angle로 바꾸고, 벡터를 평균낸 뒤 다시 변환하는 것임
- 이 방식은 유효하지만 직관적이지 않은 동작을 만들 수 있음
- 특히 axis/angle 벡터를 합치면 catastrophic cancellation이 생길 수 있음
- 예시는
[π, 0, 0]과[-π, 0, 0]을 평균내면 0이 되는 경우임 - 두 값은 동등한 회전인데 평균 결과 0은 두 회전을 대표하지 못함
- 예시는
Karcher mean
- 평면의 점 평균은 모든 점까지의 총 제곱거리를 최소화하는 점으로 볼 수 있음
- 이를 반복 최적화로 찾는 절차는 다음과 같음
- 초기 추정값
x̄ ∈ R²를 고름 - 각 점에서 추정값까지의 translation
ui = xi - x̄를 계산함 - 벡터 평균
u = (1/n) Σ ui를 구함 x̄ = x̄ + τu로 평균 방향으로 이동함|u| > ε인 동안 반복함
- 초기 추정값
- 같은 아이디어를 회전
R0, ..., Rn에 적용할 수 있음- 초기 추정 회전
R̄ ∈ R^(3×3)를 고름 - 각 행렬에 대해 추정값에서 해당 회전까지의 axis/angle
ui = log(Ri R̄^-1)를 계산함 - 벡터 평균
u = (1/n) Σ ui를 구함 R̄ = exp(τu) R̄로 평균 회전 방향으로 이동함|u| > ε인 동안 반복함
- 초기 추정 회전
- 이 알고리듬의 결과가 Karcher mean임
- Karcher mean은 다른 모든 회전까지의 제곱 각거리를 최소화하는 회전임
- catastrophic cancellation을 받지 않아 항상 0이 아닌 중간 회전으로 수렴함
- 단순 axis/angle 평균과 Karcher mean의 결과는 종종 비슷하지만, Karcher mean이 더 일관된 동작을 보임
Quaternion과 exp/log의 관계
- 이 부분은 quaternion 지식을 전제로 함
- 복소수 지수화가 skew-symmetric 2D 행렬 지수화와 동등했던 것처럼, quaternion 지수화는 skew-symmetric 3D 행렬 지수화와 동등함
- 2D에서는 axis/angle 회전
θ로 pure-imaginary complex numberiθ를 만들고 지수화함e^(iθ) = cosθ + i sinθ- 결과는 점에 곱했을 때
θ만큼 회전시키는 복소수임 - 항상 norm이 1이므로 2D 회전은 unit-norm complex number로 표현 가능함
- 3D에서는 axis/angle 회전 벡터
u에서 pure-imaginary quaternionq = ux i + uy j + uz k를 만들 수 있음 - quaternion 곱셈 규칙을 이용하면
q² = -||q||² = -θ²가 되고, 이는 skew-symmetric matrix에서 사용한 항등식과 닮아 있음 - 지수화 결과는 다음과 같음
e^q = cosθ + (q/θ) sinθ- 2D 식과 거의 같지만 imaginary axis가 하나가 아니라 세 개임
- 3D axis/angle 회전은 unit-norm quaternion으로 변환됨
- rotation matrix가 필요 없다면 quaternion 지수 맵은 계산하기 쉬운 선택지임
- quaternion 로그 맵도 단순함
θ = arccos(Re(q))u = Im(q) / sinθ
- quaternion
q로 점p를 회전하려면 conjugationq p q^-1을 계산함p = px i + py j + pz k인 pure-imaginary quaternion으로 점을 표현함- conjugation은 기술적으로
u축에 대해2θ만큼 회전시키므로, 처음에|u| = θ/2로 두면 됨
더 읽을거리
- quaternion 학습 자료로 eater.net의 quaternions를 볼 수 있음
- geometric algebra가 더 직관적인 이유는 Marc ten Bosch의 글에서 다룸
- 3D 회전의 대수적 구조인 SO(3) 를 배우면 axis/angle, quaternion, double-cover 관계를 더 잘 이해할 수 있음
- 관련 영상으로 SO(3), SU(2), quaternion, axis/angle 관계를 시각적으로 설명하는 영상이 있음
- SO(3) Wikipedia page는 axis/angle, topology, SU(2), quaternion, Lie algebra와의 연결을 다룸
- skew-symmetric matrix의 벡터 공간은
SO(3)에 대응하는 Lie algebra인 so(3) 를 이룸