The Story of Joon

사원수와 3차원 회전 본문

Computer Science

사원수와 3차원 회전

jo_on 2022. 1. 3. 03:02

3차원 컴퓨터 그래픽스에서 회전(rotation)은 매우 중요한 개념이다. 대학에서 또는 독자적으로 컴퓨터 그래픽스의 원리를 공부한 적이 있는 독자라면 3차원 회전을 사원수(quaternion)로 표현하는 방식에 대해 본 적이 있을 것이다. 단위 벡터(unit vector) \((x, y, z)\)를 회전축으로 반시계 방향으로 \(\theta\)만큼 회전시키는 동작을 사원수 방식으로는 아래와 같이 나타낸다:

\[\cos(\theta/2)+x\sin(\theta/2)\mathbf{i}+y\sin(\theta/2)\mathbf{j}+z\sin(\theta/2)\mathbf{k}\,.\]

사원수는 우리가 익히 아는 일반적인 실수나 복소수와는 또 다른 시스템이다. 놀랍게도, 이렇게 나타내면 마법과 같이 3차원 회전에 관련된 모든 연산이 편리해지고, 컴퓨터에 구현하기도 쉬워진다. (어떤 점이 편리해지는지에 대해서는 조금 뒤에 다룰 예정이다.) 대체 어떻게 3차원 회전을 사원수라는 이상한 시스템으로 표현할 수 있으며, 그 속에는 어떤 원리가 담겨져 있는 것일까?

아쉽게도 사원수의 원리를 명쾌하게 설명하는 것은 매우 어렵다. 여기에는 놀랍도록 깊은 수학이 숨어져 있으며, 컴퓨터 그래픽스를 공부하는 사람에게 이러한 지식은 불필요하게 난해하다. 따라서 많은 컴퓨터 그래픽스 교재는 주입식 교육처럼 사원수와 3차원 회전 연산을 공식으로 보여주고 암기하게 한다.

필자 역시 대학에서 컴퓨터 그래픽스 강의를 들었고, 이 강의에서 역시 원리를 깊게는 설명하지 않았다. 하지만 필자는 수학 전공자였기에 이러한 수학의 흑마법을 공식으로 외우고 그냥 지나칠 수는 없었다. 필자처럼 3차원 회전 속에 숨어있는 수학적 원리에 대해 호기심을 가졌거나 가지고 있는 독자라면, 올바른 포스트로 찾아오셨다!

무엇에 관한 글인가

이 글은 사원수가 3차원 회전을 어떻게 표현할 수 있는지, 그 속에 숨은 원리에 대해 독자들이 기하학적인 직관을 가질 수 있게 도와주는 것이 목표이다. 컴퓨터 그래픽스를 공부하며 '대체 누가 사원수 같은 걸 생각해낸 것이지?'라는 생각을 해본 적이 있다면, 이 글이 도움이 되기를 바란다.

무엇에 관한 글이 아닌가

먼저, 이 글은 컴퓨터 그래픽스나 3차원 회전에 대한 입문서가 아니다. 그러한 목적이라면 좋은 책이나 강의가 많으니 그쪽을 찾아보는 것을 권한다. 또한, 이 글은 사원수와 3차원 회전에 대해 엄밀한 수학적 이론을 정리하기 위한 글이 아니다. 엄밀함보다는 직관을 부여하는 데집중하였으며, 그 과정에서 지루한 계산이나 너무 난해한 수학은 생략하였다. 그 부족함을 채우고 싶은 독자는 하단의 참고 자료를 보기 바란다.

사전 지식

이 글을 작성할 때 수학적 지식이 깊지 않은 독자라도 읽을 수 있도록 최대한 노력했다. 우선, 고등학교나 대학교 1학년 수준의 기하와 벡터(요즘 교육과정을 잘 모르겠다...) 지식은 필수이다. 독자의 편의를 위해 글의 도입부에서 사원수와 3차원 회전에 대해 간략하게는 설명했지만, 3차원 회전에 대한 지식이 전무하다면 다소 불친절하게 느낄 수 있다. 또한 글이라는 방식의 한계로 인해 어느 정도의 공간지각력은 필요할 수 있다. 약간의 선형대수학 지식이 있다면 글을 더 쉽게 읽을 수 있지만, 필수는 아니다.

3차원 회전의 표현

컴퓨터 그래픽스에서 어떤 3차원 물체를 표현하는 기본적인 방법은, 그 물체 고유의 3차원 좌표계(frame)를 정하고, 해당 물체의 형태는 그 고유의 좌표계 안에서 표현을 하는 것이다. 그러고 나면 해당 물체의 움직임, 즉 평행이동이나 회전 등을 표현하기 위해서 그 물체의 구성요소를 일일이 움직여줄 필요가 없고, 대신 그 물체의 좌표계만 움직여주면 된다. 예를 들어서 어떤 물체의 회전을 표현하기 위해서는, 좌표계를 회전시키는 방법만 알면 된다는 것이다.

2차원 좌표계의 회전. 출처: Foundations of 3D Computer Graphics, S. Gortler

기본적으로 3차원 좌표계는 서로 수직인 세 개의 단위벡터(unit vector)로 구성되어 있다. 여기서 각 벡터의 방향은 오른손 법칙(right-hand rule)을 따른다. 즉 첫 번째 벡터가 가리키는 방향에서 두 번째 벡터가 가리키는 방향으로 오른손을 휘감았을 때 엄지손가락이 가리키는 방향을 세 번째 벡터가 가리켜야 한다. 아래 그림과 같이 이해할 수도 있다.

오른손 법칙. 출처: 위키피디아

평행이동은 단순하기 때문에, 우리는 원점이 고정된 상태에서 하나의 좌표계에서 다른 좌표계로 바꾸는 움직임에만 집중하면 된다. 수학적으로 이러한 움직임은 항상 하나의 벡터를 회전축으로 하는 회전 변환임을 증명할 수 있다.

행렬로 표현하기

선형대수학 지식이 있는 독자라면 회전 변환은 선형 변환임을 알고 있을 것이다. 3차원에서의 선형 변환은 3×3 행렬로 나타낼 수 있다. 즉, 회전 변환은 3×3 행렬로 나타낼 수 있다는 뜻이다. (하지만 당연히 모든 행렬이 회전 변환은 아니다!) 예를 들어, 아래와 같은 행렬은 회전 변환이다.

\[ \begin{bmatrix} 1/\sqrt{2} & -1/\sqrt{2} & 0 \\ 1/\sqrt{2} & 1/\sqrt{2} & 0 \\ 0 & 0 & 1 \end{bmatrix} \]

좀더 구체적으로는, 어떤 행렬이 회전 변환을 나타내기 위해서는 각 열벡터(column vector)가 단위벡터이고, 열벡터가 서로 수직이며, 행렬식이 1이어야 한다. 첫 두 조건을 만족하는 행렬을 직교행렬(orthogonal matrix)이라고 하며, 선형대수학에서 매우 중요한 개념이다. 직교행렬의 행렬식은 1 또는 -1이고, 그중 행렬식이 1인 직교행렬만 회전 변환이 될 수 있다. 참고로, 이러한 행렬을 특수직교행렬(special orthogonal matrix)이라고 한다. 이러한 이유로 3차원 회전 변환의 집합을 특수직교군(special orthogonal group)이라고도 하고, \(SO(3)\)라고 쓴다.

이렇듯 3차원 회전을 표현하는 가장 쉽고 간단한 방법은 행렬로 표현하는 것이다. 하지만 이 방식에는 여러 가지 문제점이 있다.

  • 수치적으로 불안정(numerically unstable)하다. 앞서 언급했듯이 어떤 행렬이 회전 변환이 되기 위해서는 여러 가지 조건이 필요하다. 즉 컴퓨터로 표현할 때는 이 많은 조건을 매번 확인해야 한다는 뜻이고, 회전 변환을 여러번 거치게 되면 수치적으로 더 빠르게 불안정해질 수 있다는 의미이다.
  • 회전축과 회전 각도를 알아내기 어렵다. 오직 행렬로부터 이 정보를 뽑아내기 위해서는 매우 복잡한 계산이 필요하고, 이는 수치적으로 불안하다는 문제와도 연관되어 있다.

회전축과 회전 각도를 알아내는 것이 왜 필요할까? 이는 보간(interpolation)이라고 하는 문제와 연관되어 있다. 예를 들어 애니메이션을 만든다고 하자. 초당 60프레임의 애니메이션을 만들 때, 초당 60개의 장면을 모두 그리는 것은 너무 시간이 오래 걸린다. 한 시간짜리 애니메이션을 만든다 해도 216,000개의 장면을 그려야 한다! 따라서 이보다 훨씬 적은 수의 장면만을 직접 그리고, 그 사이는 컴퓨터의 연산으로 만들어내게 된다. 이때 두 장면 사이가 부드럽게 이어지도록 하는 것이 중요하다.

평행이동의 경우, 0.1초 간격의 두 장면 사이에 어떤 물체가 1m 이동했는데 그 사이에 10개의 프레임을 넣고 싶다면, 0.1m 간격으로 물체를 찍으면 된다. 회전의 경우는 어떨까? 회전축과 회전 각도를 알고 있다면 비슷한 방식으로 해결할 수 있지만, 이 정보를 모르면 상당히 난감해지게 된다.

오일러 각도(Euler angles)

오일러 각도 표현 중 하나. 출처: 위키피디아

오일러 각도의 기본적인 아이디어는, 세 개의 회전축만 있으면 회전을 통해 원하면 좌표계로 바꿀 수 있다는 것이다. 이때 세 개의 회전축은 절대적으로 고정되어있을 수도 있고, 회전하면서 같이 움직일 수도 있다. 곧 설명하겠지만, 둘은 근본적으로 같다.

오일러 각도를 이용한 표현 방법은 여러 가지가 있다. 그중 하나는 고정된 \(x,y,z\) 좌표계에 대하여 차례대로 \(x\)축을 기준으로 \(\alpha\)만큼 회전, \(y\)축을 기준으로 \(\beta\)만큼 회전, 그리고 \(z\)축을 기준으로 \(\gamma\)만큼 회전하는 것이다. 이를 식으로 나타내면 다음과 같다.

\[ R=R_z(\gamma)R_y(\beta)R_x(\alpha) \]

변환(함수)이기 때문에 적용 순서는 오른쪽부터이다. 이를 왼쪽부터 읽으면 회전하면서 같이 움직이는 회전축의 경우로 해석할 수 있다. 즉 \(z\)축을 기준으로 \(\gamma\)만큼 먼저 회전하고, 회전하면서 바뀐 좌표계의 \(y\)축을 기준으로 \(\beta\)만큼 회전, 그리고 또 회전하면서 바뀐 좌표계의 \(x\)축을 기준으로 \(\alpha\)만큼 회전이다. 이 두번째 해석을 응용한 것이 아래 그림에 있는 짐벌(gimbal)이라는 시스템이다. 이에 대한 자세한 설명은 이 글의 주제를 벗어나므로 생략하겠다.

짐벌. 출처: 위키피디아

오일러 각도 역시 여러 문제점이 있다.

  • 세 개의 오일러 각도가 유일하게 결정되지 않을 수 있다. 이는 사실 3차원 회전을 세 개의 매개변수로 표현하려 했기 때문에 생길 수밖에 없는 어쩔 수 없는 문제이다. 위의 짐벌 응용의 사례에서 짐벌락(gimbal lock)이라는 현상이 발생하는 원인이다.
  • 보간 문제에서 여전히 회전축과 회전 각도를 알아내기 어렵다. 이를 위해서는 위의 행렬 표현으로 변환을 거쳐야 하기 때문에 행렬 표현보다도 더 어렵다고도 할 수 있다.

사원수 표현

사원수는 위의 두 표현 방식에 비하면 상당히 비직관적이지만, 상기한 문제점들을 모두 해결할 수 있는 흑마법 같은 시스템이다. 먼저 사원수는 네 실수 \(a,b,c,d\)에 대해 아래와 같이 표현되는 '수'이다.

\[ a+b\mathbf{i}+c\mathbf{j}+d\mathbf{k}\]

여기서 \(a\)를 스칼라 부분, \(b\mathbf{i}+c\mathbf{j}+d\mathbf{k}\)를 벡터 부분이라고도 한다.

사원수는 복소수의 확장으로도 이해할 수 있다. 이 수들의 덧셈은 자연스럽게 정의되고, 곱셈은 아래의 곱셈 규칙을 추가하면 자연스럽게 정의된다. 대수학 지식이 있는 독자라면 \(\mathbf{i},\mathbf{j},\mathbf{k}\)가 사원수군(quaternion group) \(Q_8\)을 만들어낸다는 사실을 알고 있을 것이다.

× \(\mathbf{i}\) \(\mathbf{j}\) \(\mathbf{k}\)
\(\mathbf{i}\) -1 \(\mathbf{k}\) \(-\mathbf{j}\)
\(\mathbf{j}\) \(-\mathbf{k}\) -1 \(\mathbf{i}\)
\(\mathbf{k}\) \(\mathbf{j}\) \(-\mathbf{i}\) -1

여기서 주의할 점은, 사원수는 실수나 복소수 체계처럼 교환법칙이 성립하지 않는다는 것이다. 당장 \(\mathbf{i}\mathbf{j}\)와 \(\mathbf{j}\mathbf{i}\)가 다르다는 것만 보아도 알 수 있다.

서론에서 언급한 공식을 다시 살펴보자. 단위벡터 \(\mathbf{u}=(x,y,z)\)를 기준으로 반시계방향으로 \(\theta\)만큼 회전하는 동작은 사원수로 아래와 같이 나타낸다.

\[ \begin{align} \mathbf{q} &= \cos(\theta/2)+x\sin(\theta/2)\mathbf{i}+y\sin(\theta/2)\mathbf{j}+z\sin(\theta/2)\mathbf{k} \\ &= \cos(\theta/2)+\sin(\theta/2)(x\mathbf{i}+y\mathbf{j}+z\mathbf{k}) \end{align} \]

여기서 \(\mathbf{q}\)와 \(-\mathbf{q}\)는 같은 회전을 의미함에 유의하자. \(\theta\)만큼 회전하는 것과 \(\theta+2\pi\)만큼 회전하는 것이 같다는 것, 그리고 \(\mathbf{u}\)를 기준으로 \(\theta\)만큼 회전하는 것과 \(-\mathbf{u}\)를 기준으로 \(-\theta\)만큼 회전하는 것이 같다는 것을 생각하면 쉽게 이해할 수 있다.

이 사원수 표현을 이용하면 3차원 회전에 대한 연산들을 매우 쉽게 수행할 수 있다. 먼저 3차원 회전 \(\mathbf{q}_1\)과 \(\mathbf{q}_2\)를 생각하자. 첫 번째 회전 변환과 두 번째 회전 변환의 합성을 나타내는 사원수는 아래와 같다.

\[\mathbf{q}=\mathbf{q}_2\mathbf{q}_1\]

\(\mathbf{q}_1\)과 \(\mathbf{q}_2\)의 순서가 바뀌는 이유는 오일러 회전에서와 마찬가지로 함수의 합성처럼 취급되기 때문이다. 다시 한번 강조하자면, 사원수는 교환법칙이 성립하지 않기 때문에 \(\mathbf{q}_1\mathbf{q}_2\)와 \(\mathbf{q}_2\mathbf{q}_1\)는 다르다.

어떤 벡터 \(\mathbf{v}\)에 사원수 \(\mathbf{q}\)가 나타내는 회전을 적용하기 위해서는 다음과 같이 하면 된다. 먼저 벡터 \(\mathbf{v}=(a,b,c)\)를 사원수 \(\mathbf{v}=a\mathbf{i}+b\mathbf{j}+c\mathbf{k}\)로 취급하자. 즉 \(\mathbf{v}\)는 스칼라 부분이 0이고 벡터 부분이 회전시키고자 하는 벡터를 나타내는 사원수이다. 그러면 회전 변환이 적용된 벡터 \(\mathbf{v}'\)은 아래와 같이 구할 수 있다.

\[\mathbf{v}'=\mathbf{q}\mathbf{v}\mathbf{q}^{-1}\]

여기서 \(\mathbf{q}^{-1}\)는 \(\mathbf{q}\)의 역원, 즉 \(\mathbf{q}\)가 나타내는 회전을 반대로 수행한 역회전을 나타낸다. \(\mathbf{q}\)가 \(\theta\)만큼 회전시키면, \(\mathbf{q}^{-1}\)는 동일한 회전축에 대해 \(-\theta\)만큼 회전시킨 것을 나타낸다.

이렇게 산출한 사원수 \(\mathbf{v}'\)는 \(\mathbf{v}\)와 마찬가지로 스칼라 부분이 0이고 벡터 부분만 남게 되는데, 이것이 우리가 얻고자 한 회전시킨 벡터가 된다.

벡터의 회전을 이렇게 계산하는 이유는 사원수 \(\mathbf{v}\)와 \(\mathbf{v}'\) 또한 일종의 '회전'으로 간주하면 이해할 수 있다. 회전한 좌표계에서 \(\mathbf{v}'\)의 역할을 알기 위해서는 먼저 원래 좌표계로 돌려보내고(\(\mathbf{q}^{-1}\)), 거기서 \(\mathbf{v}\)의 역할을 적용한 뒤, 다시 회전한 좌표계로 가져오면(\(\mathbf{q}\)) 된다.

위와 같이 3차원 회전을 쉽게 표현할 수 있다는 것 외에, 행렬 표현과 오일러 회전에서 발생하는 문제를 모두 해결할 수 있다.

  • 3차원 회전을 4개의 실수로 표현하기 때문에 수치적으로 안정적이다.
  • 하나의 3차원 회전을 나타내는 사원수는 부호만 다른 두 사원수로 유이하게 결정된다.
  • 회전축과 회전 각도의 정보를 직접 담고 있기 때문에 보간 문제가 쉽게 해결된다.

3차원 회전 공간의 기하학

이제 본격적으로 3차원 회전의 사원수 표현을 직관적으로 이해해 보자. 이를 위해 가장 중요한 작업은, 모든 3차원 회전의 집합을 시각화하는 것이다.

우선 3차원 회전은 회전축 벡터 \((a,b,c)\)를 나타내는 세 개의 매개변수, 그리고 회전 각도를 나타내는 매개변수 \(\theta\) 이렇게 총 4개의 변수로 매개화될 수 있다. 여기서 핵심은, \(\theta\)가 변화함에 따라 3차원 회전의 집합이 어떻게 변하는지 관찰하여 기하학적 구조에 관한 직관을 이끌어내는 것이다.

하지만 이것은 생각보다 쉽지 않다. 결론부터 이야기하면 3차원 회전의 집합을 시각화하려면 4차원 초구(hypersphere)가 필요하다! 하지만 우리는 4차원의 도형을 쉽게 상상할 수 없기 때문에, 좀더 단순한 경우부터 시작하는 것이 좋다.

회전축 벡터가 \(xy\) 평면에 놓이는 경우

우선은 회전축 벡터가 \(xy\) 평면에 놓일 때, 즉 위의 회전축 벡터에서 \(c\)가 0인 경우부터 생각하자. 역시 결론부터 말하자면, 이 경우 3차원 구껍질을 통해 회전 변환의 집합을 시각화할 수 있다.

회전 변환의 공간. 출처: 위키피디아

위 그림에서 구 표면의 각 점은 하나의 회전 변환을 나타낸다. 세로축은 회전 각도를 의미하고, 각 점이 중심 세로축으로부터 떨어진 방향(예를 들어 위 그림에서 노란색과 빨간색 벡터의 방향)은 회전축 벡터의 방향을 나타낸다. 따라서 구를 지표면과 평행한 단면으로 잘라서 얻어진 원은 고정된 회전 각도 \(\theta\)를 가진 회전 변환의 집합이 된다. 위 그림은 두 가지 단면을 보여주는데, 각각 회전 각도가 80˚, 160˚인 회전 변환의 집합이다. 여기서 주의할 점은, 구의 중심을 기준으로 대칭인 두 점(antipodal points)은 같은 회전 변환을 의미한다는 것이다! 이는 두 회전축 벡터의 부호가 반대일 때 회전 각도의 합이 \(2\pi\)이면 같은 회전 변환이라는 것으로부터 이해할 수 있다.

왜 이런 식으로 시각화가 가능한지, 회전 각도 \(\theta\)를 0에서부터 서서히 키워가며 관찰해보자.

\(\theta=0\)

먼저 \(\theta=0\)인 경우는, 회전을 하지 않기 때문에 회전축과 관계없이 좌표계에 아무런 변화가 없는 변환이 된다. 수학적으로는 항등(identity)이라고 표현한다. 따라서 이 경우 회전축의 집합은 원소 하나이다. 위 그림에서 북극에 대응되는 점이다.

\(0\leq\theta<\pi\)

회전 각도가 180˚ 이하인 경우. 출처: 위키피디아

이제 \(\theta\)가 점점 커지기 시작한다. 회전 각도가 \(\pi\), 즉 180˚보다 작은 경우는, 고정된 \(\theta\)에 대해 서로 다른 회전축 벡터가 모두 다른 회전 변환을 만들어낸다. 회전축이 \(xy\) 평면에 놓인다고 가정했기 때문에, 가능한 회전축 벡터의 집합은 2차원 단위벡터의 집합이 되고, 기하학적으로는 원이 된다는 것을 알 수 있다.

여기서 작은 회전 각도를 가지는 회전 변환의 집합이 큰 회전 각도를 가지는 변환의 집합보다 기하학적으로 더 '비슷한' 변환이 모인 집합이라는 점을 이해하는 것이 중요하다. (사실 수학적으로 엄밀하거나 정확한 표현은 아니지만, 느낌으로 이해하자.) 예를 들어 1˚ 회전시키는 변환들이 90˚ 회전시키는 변환들보다 더 서로 비슷한 변환들이라는 것이다. 따라서 기하학적으로, 작은 \(\theta\)의 경우 회전 변환의 집합은 더 작은 원을 형성하고, 큰 \(\theta\)의 경우 더 큰 원을 형성한다고 생각할 수 있다.

결국 \(0\leq\theta<\pi\)인 경우를 모두 종합하면, 한 점(\(\theta=0\))에서 시작해 원형(\(\theta>0\))으로 점점 커지는 모양을 상상하면 된다. 여기까지 하면 구 표면 시각화에서 상반구(upper hemisphere)까지 만들어냈다.

\(\theta=\pi\)

이제 180˚ 회전시키는 경우인데, 원형으로 시각화할 수 있다는 점은 비슷하지만, 회전축 벡터의 부호가 반대일 경우 같은 회전 변환을 의미한다는 것에 유의해야 한다. 이 경우는 위의 구 표면 시각화에서 적도(equator)를 이루게 된다.

\(\pi<\theta\leq 2\pi\)

이 범위는 \(0\leq\theta<\pi\)인 경우와 완전히 대칭적으로 생각하면 되고, 구 표면 시각화에서 하반구(lower hemisphere)를 형성한다. 하반구의 각 점은 구의 중심을 기준으로 대칭인 점이 상반구에 존재하고, 둘은 같은 회전 변환을 나타냄에 유의하자. (회전축 벡터의 방향이 반대이고, 회전 각도의 합이 \(2\pi\)이기 때문이다.)

수학의 고급 지식이 있는 독자라면 이러한 회전 변환의 공간의 기하학적 구조가 2차원 실수 사영 공간(real projective space, \(\mathbb{R}P^2\))이라는 것을 눈치챌 것이다.

회전 변환의 매개화

이제 회전 변환의 집합을 시각화했으니, 3차원 좌표를 이용해서 매개화해보자. 

구면좌표. 출처: 위키피디아

이 그림에서 \(\mathbf{P}\)가 나타내는 회전 변환의 회전축 벡터가 \((a,b,0)\)이고 회전 각도가 \(\theta\)라면, \(\mathbf{P}\)의 좌표를 어떻게 나타낼 수 있을까? 앞서 이야기했던 대로 \(\mathbf{P}\)의 \(x\)좌표와 \(y\)좌표는 회전축 벡터의 방향을 나타낸다. 따라서 \(z\)축과 \(\mathbf{P}\) 사이의 각도를 \(\phi\)라고 하면, \(\mathbf{P}\)의 좌표는 아래와 같이 나타낼 수 있다.

\[ (a\sin\phi, b\sin\phi, \cos\phi) \]

그렇다면 \(\phi\)는 무엇일까? 위의 회전 변환의 구 표면 시각화와 더불어 생각해 보자. \(\phi\)가 0부터 \(\pi\)까지 커지면, \(\theta\)는 0부터 \(2\pi\)까지 커진다. 또한 적도에서 \(\phi=\pi/2\)이지만 \(\theta=\pi\)이다. 따라서 \(\phi=\theta/2\)임을 알 수 있다.

종합하면, 회전축 단위벡터가 \((a,b,0)\)이고 회전 각도가 \(\theta\)인 회전 변환은 구 표면에서 아래의 점에 대응된다.

\[ (a\sin(\theta/2), b\sin(\theta/2), \cos(\theta/2)) \]

벌써 사원수 표현과의 유사점이 보이지 않는가?

일반적인 3차원 회전의 표현

이제 회전축 벡터가 모든 3차원 벡터가 될 수 있는 경우를 살펴보자. 이 경우 고정된 회전 각도 \(\theta\)에 대해 회전축 벡터로 가능한 것은 임의의 3차원 단위 벡터, 즉 회전 변환의 집합은 3차원 구로 시각화된다. 따라서 앞서 살펴본 경우와 같은 방식으로 생각하면, 모든 회전 변환의 집합은 4차원 초구로 시각화할 수 있다는 것을 알 수 있다! 이 경우에도 마찬가지로 초구의 중심을 기준으로 마주보는 두 점은 같은 회전 변환을 나타낸다는 것임은 항상 유의하자. 역시 고급 수학의 지식이 있는 독자라면 3차원 실수 사영 공간이 떠오를 것이다.

완전히 같은 방식으로 초구를 매개화하면, 회전축 단위벡터가 \((a,b,c)\)이고 회전 각도가 \(\theta\)인 회전 변환은 초구 표면에서 아래의 점에 대응된다.

\[ \mathbf{q}=(a\sin(\theta/2), b\sin(\theta/2), c\sin(\theta/2), \cos(\theta/2)) \]

서론에서 이야기했던 3차원 회전 변환의 사원수 표현과 일치한다는 것을 알 수 있다!

마치며

이 포스트에서는 3차원 회전 변환이 사원수로 깔끔하게 표현되는 흑마법 뒤에 숨은 기하학적 구조에 대해 간략하게 알아보았다. 사실 이 글에는 아직 부족한 점이 많다. 예를 들어서, 사원수 표현의 핵심인 회전 변환의 합성과 사원수의 곱셈이 일치하는 현상의 직관적인 이해에 관해서는 자세히 이야기하지 않았다. 필자는 이 현상에 대해 필자만의 그림을 가지고 있으나, 솔직히 말해서 수학적으로 완전히 뒷받침된다고 보기 어렵고 글로 풀어쓰기에도 너무 난이도가 높았다. (처음에는 이 내용을 작성했으나, 고민한 뒤에 삭제했다.)

사실 회전 변환이라는 것은 수학적으로 상당히 깊은 주제이다. 예를 들어서 3차원 회전 변환과 같이 곱셈 구조와 미분다양체(differential manifold) 구조를 모두 가지고 있는 군을 리 군(Lie group)이라고 하고, 수학 안에서도꽤나 난해하고 아직까지도 활발히 연구되고 있는 주제이다. 또한 잠깐 언급했던 실수 사영 공간 역시 매우 흥미로운 기하학적 성질을 가지고 있고, 이를 분석하는 데 대수적 위상수학(algebraic topology)과 같은 도구가 많이 쓰인다. 관련된 아주 재미있는 현상 중에서 벨트 트릭(belt trick)이라는 것이 있는데, 여유가 된다면 관련하여 포스트를 추가 작성할 예정이다.

수학에 관심이 많은 독자이고 흥미를 느꼈다면 이러한 주제에 대해 한번 공부해보는 것을 추천한다!

참고 자료

'Computer Science' 카테고리의 다른 글

사원수와 3차원 회전  (3) 2022.01.03
3 Comments
  • 프로필사진 황재영 2022.02.23 00:11 항상 궁금했던 개념인데 이 기회에 확실히 알게되었네요 ㅎㅎ 재밌게 읽었습니다!
  • 프로필사진 jo_on 2022.05.18 23:27 신고 부족한 글 읽어주셔서 감사합니다!
  • 프로필사진 sudo 2022.09.08 20:00 좋은글 감사합니다. 읽다가 궁금한 점이 있어서 질문합니다.

    1. 제 얕은 지식으로는 q의 역원은 동일한 축에 대해 -theta 만큼 회전한 것인데, 결국 그럼 qvq^-1은 회전한 만큼 다시 반대 방향으로 돌려주는것이지 아무것도 안하게 되는것 같은데 혹시 qv로 회전한 결과가 축이 정반대로 된것이라서 qvq^-1이 똑바로 theta만큼 다 회전시킨 결과가 되는건가요?

    2. 일부러 theta/2로 나눠서 회전하는 이유는 사원수의 실수부를 먼저 0으로 만들고 회전하려고 그러는건가요?
댓글쓰기 폼