Quick Reference
오일러각은 자세를 세 번의 축 회전으로 표현합니다. 세 숫자와 함께 축·적용 순서를 지정해야 회전이 정해집니다. 오른손 좌표계의 열벡터를 실제로 돌리고, 고정된 x→y→z축 순서로 적용하는 규약을 사용합니다.
R = Rz(γ) Ry(β) Rx(α)
v′ = Rv : 오른쪽 Rx부터 적용
α: 고정 x축 회전, β: 고정 y축 회전, γ: 고정 z축 회전
이 규약의 짐벌락: β=±90°에서 두 각도의 효과가 겹침축과 적용 순서
서로 다른 세 축을 사용하는 이 표현은 엄밀히 Tait–Bryan 각의 한 종류이며, 그래픽스에서는 오일러각이라는 이름에 함께 포함하는 경우가 많습니다. 첫 축을 마지막에 다시 쓰는 표현도 있으므로 “오일러각은 항상 y가 90°일 때 특이하다”라고 일반화하지 않습니다.
각 축의 양의 회전은 오른손 규칙을 따릅니다.
Rx(α) = [ 1 0 0 ]
[ 0 cosα -sinα ]
[ 0 sinα cosα ]
Ry(β) = [ cosβ 0 sinβ ]
[ 0 1 0 ]
[ -sinβ 0 cosβ ]
Rz(γ) = [ cosγ -sinγ 0 ]
[ sinγ cosγ 0 ]
[ 0 0 1 ]고정된 축을 기준으로 회전하는 방식과 물체와 함께 움직인 축을 기준으로 회전하는 방식은 구분합니다. 라이브러리의 XYZ, ZYX, yaw·pitch·roll이라는 이름만 보고 합성 순서를 추측하지 말고 행렬 곱과 축 정의를 확인합니다. 회전축·각도의 의미는 축각과 Rodrigues 공식에서 이어집니다.
숫자로 확인하는 합성
v=(0,1,0), α=90°, β=90°, γ=0°를 적용합니다.
고정 x축부터: Rx(90°)(0,1,0)=(0,0,1)
그다음 y축: Ry(90°)(0,0,1)=(1,0,0)
최종 결과: (1,0,0)
순서를 바꾸면:
Ry(90°)(0,1,0)=(0,1,0)
Rx(90°)(0,1,0)=(0,0,1)
최종 결과: (0,0,1)각도 목록이 같아도 적용 순서가 다르면 자세가 달라집니다. 행벡터를 쓰거나 좌표계를 바꾸는 수동 변환으로 해석하면 식의 순서·전치도 달라집니다. 행렬 곱의 규약과 함께 맞춰야 합니다.
짐벌락의 조건
β=90°를 Rz(γ)Ry(β)Rx(α)에 대입하면 α와 γ는 차이 δ=α−γ로만 남습니다.
β=90°, δ=α-γ
R = [ 0 sinδ cosδ ]
[ 0 cosδ -sinδ ]
[ -1 0 0 ]
(α,β,γ)=(0°,90°,0°)와 (30°,90°,30°)
→ δ=0°이므로 같은 회전이 상태에서는 α와 γ를 같은 양만큼 바꿔도 자세가 변하지 않습니다. 세 각도의 미소 변화가 세 개의 독립적인 회전 변화를 제공하지 못하는 특이점이 짐벌락입니다. β=−90°에서는 α+γ 조합만 남습니다.
회전행렬 자체는 여전히 가역이고 det(R)=1입니다. 물체의 회전 능력이나 3차원 공간이 사라지는 것이 아니라, 이 각도 좌표 표현에서 독립적인 제어 방향이 겹칩니다. 특이점 가까이에서는 작은 자세 변화가 큰 각도 변화로 나타나기도 합니다.
행렬에서 각도로 되돌리기
입력이 실제 순수 회전행렬이고 β를 −90°보다 크고 90°보다 작은 범위에서 선택하면 다음 식으로 한 표현을 얻습니다. Rᵢⱼ는 1부터 세는 행·열 원소입니다.
β = asin(clamp(-R₃₁,-1,1))
α = atan2(R₃₂,R₃₃)
γ = atan2(R₂₁,R₁₁)삼각함수 역함수의 기본 출력은 보통 라디안입니다. 주기성 때문에 같은 자세에 여러 각도 표현이 있으며, 위 식은 그중 한 범위만 고릅니다. clamp는 반올림 오차를 다루는 것이지 스케일·전단이 섞인 임의 행렬을 회전으로 고치는 방법이 아닙니다.
특이점에서는 α와 γ를 개별적으로 정할 수 없습니다. 정확히 β=±90°인 경우의 한 선택은 γ=0을 고정하는 것입니다.
β= 90°: γ=0, α=atan2( R₁₂, R₁₃)
β=-90°: γ=0, α=atan2(-R₁₂,-R₁₃)이는 가능한 표현 하나를 고르는 정책이며 이전 프레임과의 각도 연속성을 보장하지 않습니다. 거의 특이한 상태의 분기 임곗값과 연속성 정책은 애플리케이션에 맞춰 정해야 합니다.
표시 각도와 자세 저장
사용자가 축별 각도를 입력하거나 회전 횟수를 지정할 때 오일러각은 유용합니다. 다만 179°와 −179°를 숫자 그대로 평균하면 0°가 되어 의도한 짧은 회전 경로와 달라집니다. 이 각도 래핑 문제는 짐벌락과도 별개입니다.
일반적인 자세 합성에는 단위 쿼터니언, 두 자세 사이의 일정한 각속도 보간에는 SLERP를 사용할 수 있습니다. 쿼터니언을 저장해도 매번 오일러각으로 바꾸어 제어하면 각도 표현의 특이점은 다시 나타납니다. 여러 바퀴 회전한 이력은 최종 자세와 별도로 보관합니다.
참고 링크
2 sources