2020년 8월 9일 일요일

회전 행렬(Rotation Matrix)

[경고] 아래 글을 읽지 않고 "회전 행렬"을 보면 바보로 느껴질 수 있습니다.


[그림 1] 2차원 좌표의 여러 가지 변환(출처: wikipedia.org)

(a) 벡터 $\bf x$의 회전: ${\bf x}'$ = $\bf R x$

(b) 좌표축 $\bf x$의 회전: ${\bf x}$ = ${\bf R x}'$
[그림 2] 2차원 상에서 $\phi$방향으로 $\theta$만큼 회전(출처: wikipedia.org)

삼각 함수의 합차 공식(angle sum and difference identity)을 이용하면, [그림 2]처럼 $xy$평면에 대한 좌표점의 회전을 쉽게 공식화할 수 있다.

                  (1)

여기서 $x$ = $\rho \cos \phi$, $y$ = $\rho \sin \phi$, 원래 좌표점 $(x, y)$가 $\phi$방향으로 $\theta$만큼 회전한 좌표점이 $(x', y')$이다. 식 (1)을 행렬(matrix) 형태로 쓰면, 2차원에 대한 회전 행렬(rotation matrix)을 다음처럼 얻을 수 있다.

                  (2: ${\bf x}'$ = $\bf R x$)

2차원 회전 행렬인 식 (2)는 공식 그 자체보다 기하학적 상상과 결과 분석이 더 중요하다. [그림 2]처럼 회전에는 벡터와 좌표축의 회전이 있다. 식 (2)는 이 2가지 회전을 모두 담당한다. 벡터 회전에서는 좌표축이 고정되고, 그 위에 있는 벡터 $\bf x$를 회전시켜 같은 좌표축의 벡터 ${\bf x}'$을 만든다. 좌표축의 회전은 공식이 비슷하지만 적용은 정반대로 한다. [그림 2(b)]와 같이 좌표축 ${\bf x}'$에서 작성한 좌표 성분 $(x', y')$은 좌표축 ${\bf x}$에서 $\bf x$ = ${\bf Q x}'$에 따라 $(x, y)$로 계산된다. 당연히 점 자체는 회전하지 않고 위치를 성분별로 해석하는 좌표축만 바뀐다.
2차원 상의 회전을 쉽게 증명한다고 해서 3차원 상의 회전도 비슷하다고 오판하면 안된다. 3차원 회전은 선형 대수학(linear algebra)을 만든 핵심 개념이다. 연립 방정식(simultaneous equations)을 풀기 위해 행렬이 제안되었다고 오해할 수 있지만, 행렬 개념이 없어도 가우스 소거법(Gaussian elimination)을 이용하면 연립 방정식을 쉽게 해결할 수 있다. 오히려 행렬 개념의 진가는 고유치와 고유 벡터(eigenvalue and eigenvector)에서 드러난다. 행렬이 표현하는 선형 변환(linear transformation)에 관계없이 원래 벡터와 평행한 방향을 유지하면 고유 벡터라 부른다. 당연히 회전축(rotation axis) 방향으로 놓인 벡터는 돌리더라도 같은 방향이므로, 회전 행렬의 회전축이 고유 벡터가 된다. 벡터의 크기도 같아야 하므로, 고유치의 크기는 $1$이다. 이러한 측면에서 회전 행렬은 고유치와 고유 벡터의 개념을 이해하기 매우 좋은 예시이다. 수학사 측면에서 봐도 회전 행렬은 정말 중요하다. 사원수(quaternion), 벡터, 행렬 개념이 나오기 직전인 1840년에 로드리그Olinde Rodrigues(1795–1851)가 3차원 좌표점의 회전을 공식화했다[2], [3]. 이 공식은 로드리그의 회전 공식(Rodrigues' rotation formula)이라 부른다. 사실 로드리그가 회전 공식을 제안하기 한참 전인 1776년에 오일러Leonhard Euler(1707–1783)는 비슷한 공식을 먼저 제안했다[1], [3]. 하지만 벡터 개념에 가깝게 3차원 공간의 회전을 표현한 로드리그에게 공식의 이름이 돌아갔다. 그래서 오일러가 연구한 3차원의 회전 개념이 로드리그를 거쳐 사원수와 행렬에 영향을 주어서 고유치와 고유 벡터에 대한 개념이 정립되었다.

[그림 3] 로드리그의 회전 공식을 위한 좌표계(출처: wikipedia.org)

로드리그가 회전 공식을 증명할 때는 벡터가 없었지만, 우리는 벡터 개념을 알기 때문에 편하게 벡터를 써서 증명해보자.

[로드리그의 회전 공식]
벡터 $\bar v$를 회전축 $\hat k$를 기준으로 오른손 규칙에 따라 $\theta$만큼 회전한 벡터는 다음과 같다.

                  (3a)

                  (3b)

여기서 $\bar v$ = $\bar v_\parallel + \bar v_\bot$, $\bar v_\parallel$과 $\bar v_\bot$은 각각 $\hat k$에 평행 및 수직인 벡터이다.

[증명]
벡터의 회전은 회전축이 아닌 성분에 대해 적용하므로, [그림 3]처럼 회전축에 평행 혹은 수직인 성분으로 $\bar v$를 분해해서 표현한다.

                  (4)

그러면 세 단위 벡터 $\hat k$, $\hat v_\bot$, $\hat w$ = $\hat k \times \hat v_\bot$는 3차원 공간에 대한 정규 직교 기저(orthonormal basis)가 된다. 그러면 벡터 $\bar v$를 $\theta$만큼 회전하는 연산은 $\hat v_\bot$와 $\hat w$가 만드는 평면에서 $\bar v_\bot$가 $\theta$만큼 돌아감을 의미한다. 따라서 [그림 2]를 참고하면 $\bar v_\bot$를 회전한 벡터 $\bar \rho$는 다음과 같다.

                  (5)

최종 결과에는 회전하지 않는 $\bar v_\parallel$도 포함되어야 하므로, 식 (5)를 이용해 회전 벡터를 쉽게 표현할 수 있다.

                  (6)

따라서 식 (3)이 증명된다.
______________________________

벡터의 외적(outer product)행렬 연산으로 바꾸면, 로드리그의 회전 공식을 회전 행렬로 바꿀 수 있다. 벡터의 내적을 피하기 위해 식 (5)와 (6)을 합쳐서 다음처럼 쓸 수 있다.

                  (7)

벡터의 외적을 외적 행렬(cross-product matrix)로 바꾸어서 식 (7)을 행렬로 표현한다.

                  (8)

여기서 $\bf K$는 $\hat k$에 대한 외적 행렬, $\bf R$은 회전 행렬이다. 외적 행렬 $\bf K$를 직접 제곱하면 다음을 얻는다.

                  (9)

                  (10)

여기서 단위 벡터 $\hat k$에 대응하는 열 벡터는 $\bf k$ = $[x~y~z]^T$, $x^2 + y^2 + z^2$ = $1$, $\bf P$는 대칭 행렬(symmetric matrix) 특성을 가진 사영 행렬(projection matrix)이다. 사영 행렬은 ${\bf P}^2$ = $\bf P$를 만족하기 때문에 정사영에 대한 연산이다. 식 (10)을 식 (8)에 대입해서 더 정리하면 다음과 같다.

                  (11)

식 (11)을 행렬 원소로 풀어서 쓸 수도 있다.

                  (12)

여기서 $c$ = $\cos \theta$, $s$ = $\sin \theta$이다.


   1. 벡터의 회전(rotation of vector)   

[단위 벡터의 회전]

                  (1.1)

여기서 각속도(angular velocity) $\omega$ = $d \theta / dt$, 각속도 벡터(angular velocity vector) $\bar \Omega$ = $\omega \hat k$, $\hat k$는 회전축의 단위 벡터, $\hat v$는 $\hat k$ 주위를 오른손 규칙에 따라 회전하는 $\bar v$의 단위 벡터이다.

[증명]
식 (5)와 정규 직교 기저 $\hat k$ = $\hat v_\bot \times \hat w$를 사용해 증명한다.

                  (1.2)

여기서 $\hat \rho$ = $\bar \rho / |\hat v_\bot|$이다.
______________________________

식 (1.1)은 회전축 $\hat k$의 주위를 회전하는 좌표계를 분석할 때 유용한 공식이다. 예를 들어, $\bar v$ = $f \hat v$의 미분 공식은 성분과 단위 벡터를 각각 시간 미분해서 쉽게 구한다.

                  (1.3)

여기서 첫째 항은 좌표계를 바꾸지 않고[단위 벡터를 그대로 두고] $f$의 변화만 추적한다. 식 (1.3)은 운송 정리(transport theorem) 혹은 기본 운동학 방정식(basic kinematic equation)으로 부른다. 좌표계의 회전으로 보면, 식 (1.3)의 좌변은 관찰자 관점의 운동계[회전 운동 밖에 관찰자가 있어서 회전이 감지됨]이며, 우변의 첫째 항은 관찰자 관점의 정지계[관찰자가 회전 운동에 속해 있어서 회전을 느낄 수 없음]이다. 이 관점을 더 강조해서 관찰자 상태를 나타내는 아래첨자를 추가해서 식 (1.3)을 더 읽기 좋게 만들기도 한다.

                  (1.4)

여기서 $[\cdot]_f$는 관찰자가 고정되어(fixed) 회전 운동을 관찰한다는 의미이고, $[\cdot]_r$은 관찰자가 회전(rotated) 운동을 해서 회전을 느끼지 못한다는 표현이다. 식 (1.4)가 제시하는 개념을 회전 역학(rotational mechanics)에 넣으면, 강체 위에서 움직이는 운동체의 속도와 가속도를 즉각적으로 도출할 수 있다.

                  (1.5a)

                  (1.5b)

여기서 $\bar r$ = $r \hat r$, $\bar v$는 속도, $\bar a$는 가속도, 회전축은 고정되므로 $d \bar \Omega / dt$ = $0$이다. 식 (1.5b)에 출현한 $2 \bar \Omega \times \bar v_r$은 코리올리 힘(Coriolis force)에 쓰여서 코리올리 가속도(Coriolis acceleration)라 부른다.


   2. 회전 행렬(rotation matrix)   

[회전 행렬과 직교 행렬]
회전 행렬은 직교 행렬(orthogonal matrix)이다.

[증명]
각도 $\theta$에 $-\theta$를 넣으면, 회전 행렬의 역행렬을 구할 수 있다. 이 행렬은 회전 행렬의 전치 행렬과 같다.

                  (2.1)
______________________________

[정상 회전 행렬의 고유치]
정상 회전 행렬의 고유치는 $1, e^{i \theta}, e^{-i \theta}$이다.

[증명]
정상 회전 행렬(proper rotation matrix)정상 직교 행렬(proper orthogonal matrix)인 회전 행렬이다. 즉, 행렬식 $|{\bf R}|$ = $1$이면 정상 회전 행렬이 된다. 정상 회전 행렬 $\bf R$에 대한 고유치와 고유 벡터는 다음처럼 정의한다.

                  (2.2)

여기서 $(\cdot)^H$는 켤레 전치 행렬(conjugate transpose), 고유치와 고유 벡터는 복소수(complex number)일 수 있다. 식 (2.2)의 두 식을 서로 곱하면 고유 벡터 $\bf x$에 대한 벡터 노름(vector norm) $\|{\bf x}\|$를 정의할 수 있다.

                  (2.3)

식 (2.3)에 의해 고유치의 크기 $|\lambda|$는 항상 $1$이다. 따라서 고유치는 $\lambda$ = $e^{i \alpha}$ 형태를 가진다. 고유치를 위한 행렬식 $\left|{\bf R} - \lambda{\bf I} \right|$와 비슷하게 다음 관계식을 고려하자.

                  (2.4)

그러면 하나의 고유치는 $\lambda$ = $1$이다. 나머지 두 고유치를 $e^{i \alpha}$, $e^{i \beta}$로 두자. 모든 고유치의 곱은 행렬식이므로, $\alpha$와 $\beta$의 관계는 다음과 같다.

                  (2.5)

또한 모든 고유치의 합은 행렬의 대각합(trace)이므로, $\alpha$를 결정할 수 있다.

                  (2.6)
______________________________

행렬식이 $-1$인 이상 회전 행렬(improper rotation matrix)의 고유치는 $-1, e^{i \theta}, e^{-i \theta}$이다. 왜냐하면 식 (2.4)와 비슷한 행렬식이 다음 특성을 가지기 때문이다.

                  (2.7)

[그림 2.1] 일정 반지름 $\rho$를 가진 원상의 회전

[원상의 회전]
회전축 $\hat k$를 법선 벡터(normal vector)로 하는 원상의 회전을 위한 시작 벡터는 $xy$평면에 있는 $\bar u_0$이다. 그 다음에 시작 벡터 $\bar u_0$를 기준으로 회전 공식을 적용한다.

                  (2.8)

여기서 $\hat k$ = $(x, y, z)$, $\rho$는 원의 반지름, $\psi$는 $\hat k$의 정사영(projection) $\bar k_p$가 $x$축과 이루는 각도이다.

[증명]
벡터 $\bar u_0$는 $xy$평면에 있고 $\bar k_p$에 수직이므로, $u_{x0}x + u_{y0}y$ = $0$이 성립한다. 그러면 [그림 2.1]에 있는 초록색 직선의 방정식은 $u_{y0}$ = $- (x/y) u_{x0}$가 된다. 이 직선과 [그림 2.1]의 원과의 교점 중의 하나가 우리가 구하는 $\bar u_0$이다.

                  (2.9)

식 (2.9)의 마지막 결과에서 $u_{x0}$의 부호를 양으로 택하면 식 (2.8)이 쉽게 증명된다.
______________________________

식 (2.8)은 로드리그의 회전 공식을 적용하기 위한 벡터 $\bar v$ = $\bar u_0$임을 뜻한다. 즉, $\bar v$ = $\bar u_0$라 놓고 식 (3)에 따라 $\bar v$를 $\theta$만큼 회전하면, [그림 2.1]에 있는 초록색 벡터를 구할 수 있다. 이 과정을 계속 반복하면서 원상에 있는 회전 벡터를 원하는 대로 얻는다. 여기서 회전된 벡터의 크기는 항상 $\rho$가 된다.[$|\bar v|$ = $\rho$]


[참고문헌]
[1] L. Euler, "Nova methodus motum corporum rigidorum degerminandi (A new method for generating the motion of a rigid body)," Novi Commentarii academiae scientiarum Petropolitanae (New Commentary of the St. Petersburg Scientist Academy), vol. 20, pp. 208–238, 1776.
[3] H. Cheng, K. C. Gupta, "An historical note on finite rotations," J. Appl. Mech., vol. 56, no. 1, pp. 139–145, 1989.

[다음 읽을거리]

댓글 8개 :

  1. 안녕하세요. 그래픽스 관련 업무를 수행하는 사람입니다.
    매번 좋은 글 감사드립니다.

    한 가지 궁금한 점이 있어서 말씀드리고자 하는데요 (만일 블로그 내용에서 정답이나 참고할 사항이 있으실 경우엔 죄송합니다)

    그래픽스에서 사용하는 4x4 Transform Matrix (x,y,z,w) 를 다루는데 있어서

    어떤 Transform Matrix A와 B가 있다고 했을 때

    이 A,B 의 "중간 상태"에 해당하는 행렬은 어떻게 판단할 수 있을까요?

    "중간 상태"의 정의는 아직 막연하지만, 대략적으로 Transform의 요소를 (x/y/z) Translation, Rotation, Shear, Scaling으로 나눴을 때 A에서의 상태와 B에서의 상태의 산술 평균 (A+B) / 2 을 구한다. 라고 정의해볼려고 합니다.

    일단 이미 복합적인 Tranform이 곱해진 결과인 A나 B를 Translation, Rotation... 등등으로 분할할 아이디어도 떠오르질 않고 (불가능 한걸지도 모르겠네요)

    곱의 형태로 이어 나가는 Transform Matrix이니 만큼, A, B의 중간점은 기하평균 sqrt(AB) 으로 구할 수 있지 않을까 싶어서 다른 블로그 포스팅을 하나 발견했는데요

    https://jjycjnmath.tistory.com/597

    이 글에 따르면, 일반화 식에서는 Matrix의 1/2 제곱을 사용해야 하는데 Transform Matrix가 이게 가능한 조건인지 확실치 않고
    A,B > 0인 조건에서 쓸 수 있는 식은. A,B가 Positive-Denfinte 라고 확신할 수 있는 근거가 없어서 사용하기가 망설여집니다.

    어떤 뾰족한 아이디어가 따로 있을지 궁금합니다.

    답글삭제
    답글
    1. 반갑습니다, 익명님. 어려운 분야를 전공하시네요 👍

      1. 행렬의 거듭 제곱은 고유 분해(eigendecomposition)를 쓰면 쉽게 얻어집니다. 아래 링크 참고하세요.

      https://ghebook.blogspot.com/2020/07/eigenvalue-and-eigenvector-of-matrix.html

      2. 회전 행렬은 고유치 중 일부가 복소수거나 0보다 작아서 양의 정부호 행렬이 될 수 없어요.

      삭제
  2. 안녕하세요,
    기하학 관련해서 질문이 있습니다.
    여러방법으로 시도해보았지만 도무지 해결이되지않아 이렇게 찾아뵙게되었습니다..

    1. 아래 그림에서, 점 O, P, Q의 위치가 주어지고 평면 위에서의 거리 α와 β를 알때
    점 R의 위치를 구할 수 있을까요? (QP는 평면의 법선벡터)

    https://drive.google.com/file/d/1MtArSFJ3K_jrJQNkUASOMQWpxal0agBb/view?usp=sharing

    2. 아래그림에서 평면위의 점을 (0.0.0), 법선벡터를 (0,0,법선벡터크기)로 만들었을 때, 평면위 다른 점의 좌표와 원래 원점이었던 점의 좌표를 구할 수가 있을까요?
    https://drive.google.com/file/d/1EM_n7zez9slX_Pf0MU_fBuyssRpyo8NC/view?usp=sharing

    답글삭제
    답글
    1. 1. 평면 위 점의 좌표와 법선 벡터를 이용해 평면의 방정식을 구하더라도 점 R의 위치를 알 수 없어요. 평면 위의 단위 벡터가 필요해요.

      2. 무슨 말인지 모르겠네요.

      삭제
    2. 2. Q를 원점으로 이동시키고 법선벡터를 (0,0,|P-Q|)로 정의했을때 원래의 원점의 좌표를 구하려고 합니다.
      (그림에 오타가 있었네요.. L이 아니라 Q 입니다. )

      삭제
    3. 그림이 보이지 않았는데요, 거꾸로 풀어보면 답이 나오지 않을까요? 좌표 변환된 최종 좌표계가 간단하니까 원점부터 시작해 문제의 좌표계로 가는 방식으로요.

      삭제
  3. 어 맞아맞아, 놀랍지만 그건 사실이야

    답글삭제

욕설이나 스팸글은 삭제될 수 있습니다. [전파거북이]는 선플운동의 아름다운 인터넷을 지지합니다.