2 분 소요

다시 보는 회전 변환

회전 변환 역시 ‘선형 변환’이며
그렇기에 ‘행렬’로 표현이 가능

먼저 3차원 공간에서의 ‘회전’은
특정한 ‘축’을 기준으로 이루어진다

그리고 그 각도만큼
회전할지를 결정

‘축’과 ‘각도’를 먼저 생각해야 함!

각각의 ‘회전’들은 모두
‘선형 변환’이기에 x,y,z 축에 대한 다양한 회전을
하나의 ‘회전 행렬’로 압축하여 표현이 가능
(연산 절약)

처음 공부 시작할 때는 각각의 x,y,z 를 기준으로
2차원 회전을 적용하여 반복함으로서 공부
‘오일러 회전(Euler Rotation)’이라 함

  • 오일러 회전?
    3D 회전을 각각의 x,y,z 를 기반으로
    2차원 회전을 시켜 그 각도를 구하는 방식
    회전 순서가 중요하다
    직관적이며, 쉽게 이해가 가능하나
    ‘짐벌락’이 발생할 수 있기에 자유로운 회전이 어려움
  • 짐벌락(Gimbal Lock)?
    오일러 회전 방식은 x,y,z 축을 회전시키는 방식이나
    특정한 회전 각도에서 ‘두 축’이 겹쳐버리면
    두 개의 축이 같이 회전해버리는 현상
    (두 축이 겹쳐져 하나의 ‘평면’이 되어버리며
    이를 구분할 수 없어 lock이라 부름)
    사원수 방식이나 회전 각도 제한 등을 이용하여
    문제를 예방하거나 방지하는 편이다

Image
출처

나중에 가면 사원수 (Quaternion)을 이용하여
3차원 회전을 진행

  • 2차원 회전은 ‘회전 축’을 위하여
    결국 3차원의 개념을 도입할 수 밖에 없음
    따라서 3차원 회전 역시 ‘회전 축’을 위해
    4차원의 개념인 ‘사원수’를 도입

3차원 회전의 유도 과정

Image

일단 회전 축은 벡터 n(단위 벡터)이며
회전 각도는 theta 이다

벡터 v를 theta 만큼 회전시켜
Rn(v)를 구한다 가정

v를 n에 직교투영 하여 새로운 지점(point)을 구할 수 있음

proj n(v) : 벡터 n에 v를 직교 투영하여 얻은 결과
이것을 n에 곱해주면
v를 n에 대입한 위치를 구할 수 있음
즉, 사진 상에서 보는 원의 ‘중점’ 위치

(말이 어려운데, 그냥 v에서 n축만큼의 요소들을
추출한 결과라 생각하자)

이후, v에 그 투영한 결과(원의 중점)를 빼줌으로서
(a - b : b에서 a를 향해 바라보는 방향 벡터)
중점 -> v 를 향하는 새로운 벡터(vt)를 구할 수 있다
(t를 뒤집은 기호는 perpendicular 라 함)

이후 v와 n을 외적하여
n X v 벡터를 구한다
(두 벡터에 ‘직교’하는 새로운 벡터)

n x v 벡터는 vt와도 수직이며
(vt는 v,n과 같은 평면 위에 존재한다)
두 벡터의 길이는 동일하다

  • 외적의 길이?
    외적의 길이 |v X n|은
    |v| 와 |n| 그리고 두 각을 이루는 sin(a)의 곱과 같다
    (이 때, n은 단위벡터라 길이가 1)
  • |vt| 역시, |v| * sin(a)이다
    (삼각함수를 통해서 구할 수 있음)
    (v와 n이 이루는 각도가 a이므로
    sin(a) = |vt| / |v| 이다
    따라서 |vt| = |v| * sin(a))

=> 결과적으로 두 벡터의 길이가 같다
두 벡터는 같은 원 위에 존재한다 말할 수 있음

n x v 와 vt를 기준으로 2차원으로 보게 되는 경우
우측의 2차원 원으로 볼 수 있음

Rn(vt)는 theta 각도 만큼 회전시킨 vt이다

이 때, Rn(vt)와 vt, v x n 의 길이는 모두 같음

따라서, Rn(vt) = cos(theta) * vt + sin(theta) * n x v 가 성립

  1. 일단 cos(theta) * vt에 sin(theta) * n x v를 더하면
    기하학적 의미의 ‘벡터의 덧셈’의 의미에서 해당 공식이 성립

  2. cos(theta) * vt는 rn(vt)에서 vt 방향으로 직교 투영 하여
    구할 수 있는 값이며, 그 값은 cos(theta)를 곱하여
    현재 vt의 위치에 0~1 사이의 값을 곱하여 얻는 위치

  3. sin(theta) * n x v 도 비슷하다
    sin(theta) = cos(90 - theta)이고
    rn(vt)가 n x v로 직교 투영할 때의 각도가 90 - theta

그림으로 요약하자면,

Image

최종적으로 Rn(v) = proj n(v) + Rn(vt)가 된다
해당 수식을 풀면 다음과 닽다

Image
Image

로드리게스 회전 공식

회전 행렬의 역행렬

Image

회전 행렬은 역행렬을 직접 구하는 것 말고도
전치 행렬을 곱해줌으로서 회전을 역변환 시켜
원래 행렬로 되돌릴 수 있음
(회전 행렬에 한해 ‘역행렬 = 전치 행렬’이 동일)

댓글남기기