Quick Comparison
실수 정사각 Q가 QᵀQ=I이면 길이와 각도를 보존합니다. det(Q)=1인 회전과 det(Q)=-1인 지향(orientation) 반전을 구분합니다. 여기서 지향 반전은 기준 축의 오른손·왼손 관계가 뒤집히는 의미이며 모든 v를 -v로 보낸다는 뜻은 아닙니다. 3차원에서는 반사와 회전의 합성도 포함합니다. 2·3차원의 원점을 고정하는 변환을 기준으로 합니다.
2D 회전: R(θ) = [ cosθ -sinθ ]
[ sinθ cosθ ]
단위 법선 n의 원점을 지나는 선/평면에 대한 반사:
H = I - 2nnᵀ회전 행렬의 두 열
오른손 xy 좌표에서 반시계 회전을 양의 θ로 둡니다. 표준 기저 e₁=(1,0)은 (cosθ,sinθ)로, e₂=(0,1)은 (-sinθ,cosθ)로 갑니다. 이 두 결과를 열로 모으면 R(θ)입니다.
R(90°) = [ 0 -1 ]
[ 1 0 ]
R(90°)(2,1)=(-1,2)
입력과 출력의 제곱 길이: 모두 5두 열의 길이는 1이고 내적은 0이므로 RᵀR=I입니다. 따라서 R⁻¹=Rᵀ=R(-θ)입니다. 벡터를 실제로 θ만큼 돌리는 것과 좌표 축을 θ만큼 돌린 뒤 같은 벡터를 표현하는 것은 반대 방향의 변환입니다.
법선 성분을 뒤집는 반사
v를 n 방향 성분 (n·v)n과 평면에 평행한 나머지로 나눕니다. 반사는 평행 성분을 유지하고 법선 성분만 반대로 만들므로 Hv=v−2(n·v)n입니다. n은 단위 벡터여야 합니다. 일반 n≠0을 쓴다면 분모 nᵀn을 넣습니다.
선 x=y의 단위 법선 n=(1,-1)/√2
H = [ 0 1 ]
[ 1 0 ]
H(2,1)=(1,2), det(H)=-1, H²=I원점에서 떨어진 선·평면은 그 위의 점 p₀를 잡아 p′=p₀+H(p−p₀)로 처리합니다. 여기에는 원점 이동이 포함되므로 아핀 변환의 관점도 필요합니다.
3차원 축각과 Rodrigues 공식
단위 회전축 u에 평행한 성분은 회전해도 그대로입니다. 나머지는 u에 수직인 평면 안에서 회전합니다. 오른손 방향으로 θ만큼 돌리는 경우입니다.
v∥ = (u·v)u
v⊥ = v - v∥
Rv = v∥ + cosθ v⊥ + sinθ (u×v⊥)
= cosθ v + (1-cosθ)(u·v)u + sinθ(u×v)u=(0,0,1), v=(1,0,0), θ=90°이면 u·v=0이고 u×v=(0,1,0)이므로 Rv=(0,1,0)입니다. 외적을 v×u로 바꾸면 회전 방향이 반대가 됩니다. 축의 길이가 0이거나 단위화하지 않은 값을 그대로 쓰는 경우도 구분합니다.
합성과 수치 경계
3차원 회전은 일반적으로 순서를 바꿀 수 없습니다. 오른손 기준 x축과 y축의 90° 회전에서 e₁=(1,0,0)을 사용하면 R_y R_x e₁=(0,0,-1), R_x R_y e₁=(0,1,0)입니다. 열벡터에서는 오른쪽 행렬부터 적용합니다.
순수 회전을 반복 합성한 결과가 부동소수점 오차로 정확한 직교성을 잃을 수 있습니다. 길이·직교성이 요구되는 저장 방식과 재정규직교화 정책을 확인합니다. 삼각함수 API의 라디안 단위와 설명 예제의 도 단위도 맞춥니다.
법선·탄젠트·면 방향은 반사가 포함된 경우 별도 관계가 있으므로 법선의 역전치와 연결합니다. 쿼터니언 보간이나 카메라 조작 UI는 이 행렬·벡터 공식의 범위 밖입니다.
세 각도로 회전을 지정할 때의 특이점은 오일러각과 짐벌락, 네 성분으로 자세를 저장·합성하는 방법은 쿼터니언, 두 자세 사이의 회전 경로는 SLERP에서 다룹니다.
참고 링크
2 sources