회전 행열(Rotation Matrices)

개 요 (Introduction)

회전 행열 R은 3-D 공간에서 물체의 회전을 표현한다. 이것은 변형구배(deformation gradients)와 극좌표분해(polar decomposition)에서 소개된 바 있다.

회전 행열은 좌표변환 행열 Q와는 다르지만 밀접하게 관련이 있다.

변환 행열은 물체를 고정한 채 좌표계의 변환만을 나타낸다. 반면에 회전 행열은 고정된 좌표계에서 물체의 회전을 표현한다. 종종 혼란스럽기도 하지만, 놀라운 사실은 각 행열은 다른 행열에 대해서 전치(tranpose) 행열이라는 것이다.

요 약 (Summary)

회전 행열 R은 좌표계는 고정하고 벡터와 텐서를 회전시키는데 쓰인다. 물체가 회전될 때 통상 이 물체와 관련된 벡터와 텐서도 같이 회전하게 된다.

회전 행열을 적용하는 일반적인 규칙은 좌표변환 행열(coordinate transformation matrix)과 동일하다.

벡터(Vectors)                               \({\bf v'}={\bf R}\cdot{\bf v}\)
2등급 텐서(2nd Rank Tensors) \(\boldsymbol\sigma'={\bf R}\cdot\boldsymbol\sigma\cdot{\bf R}^T\)
2등급 텐서(4th Rank Tensors) \({\bf C'}={\bf R}\cdot{\bf R}\cdot{\bf C}\cdot{\bf R}^T\cdot{\bf R}^T\)

그리고 텐서 표기법(tensor notation)으로는

벡터            \(v'_i=R_{ij}v_j\)
2등급 텐서 \(\sigma'_{mn}=R_{mi}R_{nj}\sigma_{ij}\)
4등급 텐서 \(C'_{mnop}=R_{mi}R_{nj}R_{ok}R_{pl}C_{ijkl}\)

2차원에서 R

\({\bf R}=\begin{bmatrix}\cos\theta&-\sin\theta\\\sin\theta&\cos\theta\end{bmatrix}\)

여기서 θ는 회전각도이다. R은 단지 Q의 전치, 즉, \({\bf R}={\bf Q}^T\) 이고 \({\bf Q}={\bf R}^T\) 이다.

회전 행열의 성질 (Rotation Matrix Properties)

회전 행열은 아래 2-D 벡터의 예에서 볼 수 있듯이 몇가지 특이한 성질을 가지고 있으며, 3-D에도 동일하게 적용된다. 이것들은 문제가 생겼을 경우 회전 행열의 정확성을 확인하는데 유용하다. 어느 회전 행열이 아래의 모든 항목을 통과하더라도 틀린 것일 수 있지만, 하나라도 불만족한다면 이것은 명백히 잘못된 것이다!

R의 행열식(determinant)은 1이다.
R의 역행열(inverse)은 그것의 전치(transpose)행열이다.
● 임의의 행 또는 열과 그 자신과의 내적(dot product)은 1이다.
예 : \((\cos\theta{\bf i}+\sin\theta{\bf j})\cdot(\cos\theta{\bf i}+\sin\theta{\bf j})=1\)
● 임의의 행과 다른 행과의 내적은 0이다.
예 : \((\cos\theta{\bf i}+\sin\theta{\bf j})\cdot(-\sin\theta{\bf i}+\cos\theta{\bf j})=0\)
● 임의의 열과 다른 열과의 내적은 0이다.
예 : \((\cos\theta{\bf i}-\sin\theta{\bf j})\cdot(\sin\theta{\bf i}+\cos\theta{\bf j})=0\)

회전 행열의 곱셈 (Multiplication of Rotation Matrices)

위로부터 임의의 두개의 다른 행 또는 열 간의 내적은 0이고, 반면에 그 자신과의 내적은 1이다. 이것은 행열 및 텐서 표기법으로 아래와 같이 쓸 수 있다.

\({\bf R}\cdot{\bf R}^T={\bf I}\ \text{그리고}\ R_{ik}R_{jk}=\delta_{ij}\)

이것은 또한 회전 행열의 전치 행열은 그것의 역행열임을 보여준다.

벡터의 회전 (Rotating of the Vector)

앞의 그림의 물체 상의 벡터가

\({\bf v}=2{\bf i}+9{\bf j}\)

이고 반시계 방향 50˚로 좌표계를 회전시키면

\(\begin{Bmatrix}v_x\\v_y\end{Bmatrix}=\begin{bmatrix}\cos50^\circ&\sin50^\circ\\-\sin50^\circ&\cos50\circ\end{bmatrix}\begin{Bmatrix}2\\9\end{Bmatrix}=\begin{Bmatrix}8.18\\4.25\end{Bmatrix}\)

따라서 좌표변환된 벡터는

\({\bf v}=8.18{\bf i}'+4.25{\bf j}'\)

이다. 반대로, 물체 자신을 반시계 반향 50˚로 좌표계를 회전시키면

\(\begin{Bmatrix}v'_x\\v'_y\end{Bmatrix}=\begin{bmatrix}\cos50^\circ&-\sin50^\circ\\\sin50^\circ&\cos50^\circ\end{bmatrix}\begin{Bmatrix}2\\9\end{Bmatrix}=\begin{Bmatrix}-5.61\\7.32\end{Bmatrix}\)

따라서 회전된 벡터는

\({\bf v}'=-5.61{\bf i}+7.32{\bf j}\)

이다. v'의 아포스트로피(')는 초기 v 벡터와 다름(이 경우는 회전된)을 의미하나, ij는 좌표계가 동일하므로 그대로이다.

회전과 좌표변환 비교 (Comparing Rotations to Transformation)

앞의 예제에서는 벡터를 반시계 방향으로 50˚ 회전시켰다. 이번에는 대신에 좌표계를 시계방향으로 회전시키면, θ는 -50˚가 된다.

\(\begin{Bmatrix}v_x\\v_y\end{Bmatrix}=\begin{bmatrix}\cos(-50^\circ)&\sin(-50^\circ)\\-\sin(-50^\circ)&\cos(-50^\circ)\end{bmatrix}\begin{Bmatrix}2\\9\end{Bmatrix}=\begin{Bmatrix}-5.61\\7.32\end{Bmatrix}\)

따라서, 벡터는 회전된 좌표계에서 다음과 같이 쓸 수 있다.

\({\bf v}=-5.61{\bf i}'+7.32{\bf j}'\)

여기서 중요한 점은 앞의 예제에서 회전된 벡터와 이번 예제에서 반대로 회전된 좌표계에서의 벡터 성분값들은 동일하다는 것이다.

3-D에서의 R의 일반적 정의는 다음과 같다.

\({\bf R}=\begin{bmatrix}\cos(x',x)&\cos(y',x)&\cos(z',x)\\\cos(x',y)&\cos(y',y)&\cos(z',y)\\\cos(x',z)&\cos(y',z)&\cos(z',z)\end{bmatrix}\)

여기서 (x', x)는 x'과 x축 간의 각도를, (x', y)는 x'과 y축 간의 각도 등을 나타낸다. 이것은 실제로 Q의 전치 행열이다.


3-D를 2-D로 축소 (3-D Reduction to 2-D)

z-축을 기준으로 회전한다는 것은 z'과 z의 각도가 0˚를 유지하므로, cos(z', z)=1 이다. 반면에 cos(x', z)=cos(y', z)=cos(z', x)=cos(z', y)=0 이며, 이유는 이 축들이 이루는 각도는 모두 90˚이기 때문이다.

y'과 x 사이 각도는 90˚+θ 이므로, cos(y', x)=cos(90˚+θ)=-sinθ.

같은 방법으로 x'과 y 사이의 각도는 90˚-θ 이므로, cos(x', y)=cos(90˚-θ)=sinθ.

위의 모두를 종합하면

\({\bf R}=\begin{bmatrix}\cos\theta&-\sin\theta&0\\\sin\theta&\cos\theta&0\\0&0&1\end{bmatrix}\)

이것은 3-D 행열 내에서 2-D 회전 행열을 나타낸다.

회전 행열을 해석하고 생성하는 또 다른 방법은 다음과 같다.

\({\bf R}=\begin{bmatrix}({\bf i}'\text{의 x성분})&({\bf j}'\text{의 x성분})&({\bf k}'\text{의 x성분})\\({\bf i}'\text{의 y성분})&({\bf j}'\text{의 y성분})&({\bf k}'\text{의 y성분})\\({\bf i}'\text{의 z성분})&({\bf j}'\text{의 z성분})&({\bf k}'\text{의 z성분})\end{bmatrix}\)

여기서 "i'의 x성분"은 단위벡터 i'의 x성분이라는 의미이다. 다시 말하면, 단위벡터 i'의 기준 x, y, z 좌표계에 대한 첫번째 성분이다.

연속 회전 - 로우 (Successive Rotations - Roe Convention)

3-D 회전 행열은 좌표축을 중심으로 일련의 3개의 연속적인 회전으로 볼 수 있다. 임의의 회전순서로 임의의 회전축이 선정될 수 있으므로 수많은 방법이 있을 수 있다. 인기있는 선정 방법으로 소위 로우 규약(Roe convention)이 있다.

아래 그림에서 보여진 것과 같이, (1) z축을 중심으로 각도 Ψ 만큼 회전, 다음 (2) 새로운 y축(첫번째 z축 중심으로 회전된)을 중심으로 각도 Θ 만큼 회전, 마지막으로 (3) 기울어진 z축을 중심으로 다시 한번 Φ 만큼 회전한다.

로우 규약은 많이 쓰이긴 하나 한가지 불명확한 점이 있다. 그것은 Θ=0 이먄, Ψ와 Φ의 구분이 되지 않으며, 그 둘의 합만을 포함할 수 있다.

Ψ, Θ, Φ 순서대로 회전하면 회전 행열들은 아래와 같다.

\(\begin{align}{\bf R}&=\begin{bmatrix}\cos\Psi&-\sin\Psi&0\\\sin\Psi&\cos\Psi&0\\0&0&1\end{bmatrix}\begin{bmatrix}\cos\Theta&0&\sin\Theta\\0&1&0\\-\sin\Theta&0&\cos\Theta\end{bmatrix}\begin{bmatrix}\cos\Phi&-\sin\Phi&0\\\sin\Phi&\cos\Phi&0\\0&0&1\end{bmatrix}\\&=\begin{bmatrix}\cos\Psi\cos\Theta\cos\Phi-\sin\Psi\sin\Phi&-\cos\Psi\cos\Theta\sin\Phi-\sin\Psi\cos\Phi&\cos\Psi\sin\Theta\\\sin\Psi\cos\Theta\cos\Phi+\cos\Psi\sin\Phi&-\sin\Psi\cos\Theta\sin\Phi+\cos\Psi\cos\Phi&\sin\Psi\sin\Theta\\-\sin\theta\cos\Phi&\sin\Theta\sin\Phi&\cos\Theta\end{bmatrix}\end{align}\)

로우 각도 예제 (Roe Angle Examples)

위의 그림에서, Ψ=60˚, Θ=30˚, Φ=45˚ 이라고 한다. 이들 로우 각도들은 다음과 같은 회전 행열은 준다.

\(\begin{align}{\bf R}&=\begin{bmatrix}\cos60^\circ\cos30^\circ\cos45^\circ-\sin60^\circ\sin45^\circ&-\cos60^\circ\cos30^\circ\sin45^\circ-\sin60^\circ\cos45^\circ&\cos60^\circ\sin30^\circ\\\sin60^\circ\cos30^\circ\cos45^\circ+\cos60^\circ\sin45^\circ&-\sin60^\circ\cos30^\circ\sin45^\circ+\cos60^\circ\cos45^\circ&\sin60^\circ\sin30^\circ\\-\sin30^\circ\cos45^\circ&\sin30^\circ\sin45^\circ&\cos30^\circ\end{bmatrix}\\&=\begin{bmatrix}-0.3062&-0.9186&0.2500\\\ \ \ 0.8839&-0.1768&0.4330\\-0.3536&\ \ \ 0.3536&0.8660\end{bmatrix}\end{align}\)

반대로 하기 - 회전 행열로부터 회전각도 결정 (Going In Reverse - Determining Roe Angles from a Rotation Matrix)

아래와 같은 값들은 갖는 회전 행열이 있을 때 이 행열에 해당하는 로우 각도들을 계산해 보자.

\({\bf R}=\begin{bmatrix}R_{11}&R_{12}&R_{13}\\R_{21}&R_{22}&R_{23}\\R_{31}&R_{32}&R_{33}\end{bmatrix}\)

첫째로 가장 쉬운 단계는 \(R_{33}\) 성분을 살펴 보는 것이다. 이것은 단순히 Θ의 코사인 값, 즉 \(\Theta={\rm Cos}^{-1}(R_{33})\) 이다.

두번째 단계는 다음과 같이 Ψ를 결정한다.

\[\frac{R_{23}}{R_{13}}=\frac{\sin\Psi\sin\Theta}{\cos\Psi\sin\Theta}=\frac{\sin\Psi}{\cos\Psi}=\tan\Psi\]

따라서

\[\Psi={\rm Tan}^{-1}\left(\frac{R_{23}}{R_{13}}\right)\]

같은 방법으로

\[\Phi={\rm Tan}^{-1}\left(\frac{R_{32}}{-R_{31}}\right)\]

단, 위의 식들은 Θ가 매우 작지 않아야 한다. Θ가 미소한 경우, sinΘ도 매우 작게되어, \(R_{31},\,R_{32},\,R_{13},\) 및 \(R_{23}\)도 sinΘ를 포함하므로 작아지게 된다. 이것은 이러한 계산에 있어서 주요한 반올림 오차(round-off errors)를 유발할 수가 있다.

다행히, 이러한 경우(Θ→0) Ψ와 Φ가 서로 구별될 수 없음을 기억하면 된다. 이 때는 Φ를 0으로 정하고, \(\Psi={\rm Sin}^{-1}\left(R_{21}\right)\)로 계산한다.

예제 : 행열로부터 로우 각도 구하기 (Example : Roe Angles from Matrix)

앞의 예제의 행열로 시작해서 반대로 풀어본다.

\({\bf R}=\begin{bmatrix}-0.3062&-0.9186&0.2500\\\ \ \ 0.8839&-0.1768&0.4330\\-0.3536&\ \ \ 0.3536&0.8660\end{bmatrix}\)

먼저 \(R_{33}\) 항으로부터 Θ를 결정한다.

\(\Theta={\rm Cos}^{-1}\left(R_{33}\right)={\rm Cos}^{-1}(0.8660)=30^\circ\)

Θ가 0에 가깝지 않으므로, Ψ와 Φ를 다음과 같이 계산한다.

\[\begin{align}\Psi&={\rm Tan}^{-1}\left(\frac{R_{23}}{R_{13}}\right)={\rm Tan}^{-1}\left(\frac{0.4330}{0.2500}\right)=60^\circ\\\Phi&={\rm Tan}^{-1}\left(\frac{R_{32}}{-R_{31}}\right)={\rm Tan}^{-1}\left(\frac{0.3536}{0.3536}\right)=45^\circ\end{align}\]

예상과 같이 원래 값들이 구하여 졌다: Ψ=60˚, Θ=30˚, 및 Φ=45˚ 

축 중심 회전 (Rotation About An Axis)

회전 행열은 정의하는 또 다른 방법은 회전 축 벡터 p와 이 p축을 중심으로 회전각 α를 정하는 것이다.


 이 경우 회전 행열은 아래와 같이 쓰여진다.

\({\bf R}={\bf I}\cos\alpha+{\bf p}\otimes{\bf p}(1-\cos\alpha)-{\bf P}\sin\alpha\)

여기서

\({\bf P}=\begin{bmatrix}\ \ 0&\ \ p_3&-p_2\\-p_3&0&\ \ \ p_1\\\ \ \ p_2&-p_1&0\end{bmatrix}\)

행열을 전개하면

\({\bf P}=\begin{bmatrix}\cos\alpha+p_1^2(1-\cos\alpha)&p_1p_2(1-\cos\alpha)-p_3\sin\alpha&p_1p_3(1-\cos\alpha)+p_2\sin\alpha\\p_2p_1(1-\cos\alpha)+p_3\sin\alpha&\cos\alpha+p_2^2(1-\cos\alpha)&p_2p_3(1-\cos\alpha)-p_1\sin\alpha\\p_3p_1(1-\cos\alpha)-p_2\sin\alpha&p_3p_2(1-\cos\alpha)+p_1\sin\alpha&\cos\alpha+p_3^2(1-\cos\alpha)\end{bmatrix}\)

늘 그렇듯이, 텐서 표기법으로 꽤 간결하게 쓸 수 있다.

\(R_{ij}=\delta_{ij}\cos\alpha+(1-\cos\alpha)p_ip_j-\epsilon_{ijk}p_k\sin\alpha\)

Q의 텐서방정식과 유사성이 있음에 주목한다. 차이점은 단지 sinα 앞에 + 혹은 -일 뿐이다.

\(Q_{ij}=\delta_{ij}\cos\alpha+(1-\cos\alpha)p_ip_j+\epsilon_{ijk}p_k\sin\alpha\)

p가 단위벡터임을 아는 것이 매우 중요하다. 다른 길이의 벡터를 쓰면 잘못된 결과를 얻게 된다.

또한, 일반적으로 회전 각도로 α 대신 θ나 Φ를 사용한다. 하지만 여기서는 로우 규약 각도인 Ψ, Θ 및 Φ 와의 혼란을 피하기 위하여 α를 사용하였다.

이 방법을 쓰면 물체의 회전을 가시화하기 용이하다. 예를 들면, 2-D의 경우 회전은 z-축을 중심으로 일어나므로, p=(0, 0, 1) 이다. 이것으로 다음 회전 행열이 유도된다.

\({\bf R}=\begin{bmatrix}\cos\theta&-\sin\theta\\\sin\theta&\cos\theta&0\\0&0&1\end{bmatrix}\)

로우 각도와 마찬가지로, 회전 행열 R로부터 p와 α를 구하는게 가능하다. 첫번째 단계는 α를 결정한다. 이것은 행열의 대각합을 취하여 계산된다.

\[\alpha={\rm Cos}^{-1}\left[{1\over2}\left\{\text{tr}({\bf R})-1\right\}\right]\] 

α가 결정되면, p의 성분들은 다음식으로 계산한다.

\[p_1=\frac{R_{32}-R_{23}}{2\sin\alpha}\qquad p_2=\frac{R_{13}-R_{31}}{2\sin\alpha}\qquad p_3=\frac{R_{21}-R_{12}}{2\sin\alpha}\]

이들 3개 방정식은 텐서 표기법으로 아래와 같이 간단히 요약된다.

\[p_i=\frac{-\epsilon_{ijk}R_{jk}}{2\sin\alpha}\]

α=0 일 때는 p가 정의되지 않음에 유의한다. 이것은 "먼저 회전하지 않으면 회전축은 의미를 갖지 못한다"를 뜻한다.

P와 α 원래값 구하기 (Backing out P and α)

앞의 로우 각도: Ψ=60˚, Θ=30˚, 및 Φ=45˚에 해당하는 단일회전 p와 α를 결정하라.

<풀이> 주어진 로우 각도에 해당하는 회전 행열은

\({\bf R}=\begin{bmatrix}-0.3062&-0.9186&0.2500\\\ \ \ 0.8839&-0.1768&0.4330\\\ \ \ 0.3536&\ \ \ 0.3536&0.8660\end{bmatrix}\)

α에 대해서 풀면

\[\alpha={\rm Cos}^{-1}\left\{{1\over2}(-0.3062-0.1768+0.8660)-1\right\}=108^\circ\]

p에 대해서 풀면

\[\begin{split}p_1&=\frac{0.3536-0.4330}{2\sin108^\circ}=-0.0417\\p_2&=\frac{0.2500+0.3536}{2\sin108^\circ}=0.3173\\p_3&=\frac{0.8839+0.9186}{2\sin108^\circ}=0.9475\end{split}\]

따라서 해당 로우 각도는 주어진 축 p= (-0.0417, 0.3173, 0.9475)을 중심으로 108˚ 단일회전과 동일하다.

역행열과 전치행열 (Inverses and Transposes)

모즌 회전 행열은 다소 주목할 만한 성질을 갖는다 - 그것의 전치행열은 역행열이 된다.

\({\bf R}^T={\bf R}^{-1}\qquad{\bf R}^T\cdot{\bf R}={\bf I}\)

내적 예제 (Dot Product Example)

앞의 행열 R을 자신의 전치행열과 곱하면 단위행열을 얻는다. 따라서 자신의 전치행열은 역행열이 되어야만 한다.

\(\begin{split}{\bf R}^T\cdot{\bf R}&=\begin{bmatrix}-0.3062&\ \ \ 0.8839&-0.3536\\-0.9186&-0.1768&\ \ \ 0.3536\\\ \ \ 0.2500&\ \ \ 0.4330&\ \ \ 0.8660\end{bmatrix}\begin{bmatrix}-0.3062&-0.9186&0.2500\\\ \ \ 0.8839&-0.1768&0.4330\\\ \ \ 0.3536&\ \ \ 0.3536&0.8660\end{bmatrix}\\&=\begin{bmatrix}1&0&0\\0&1&0\\0&0&1\end{bmatrix}={\bf I}\end{split}\)

출처 http://www.continuummechanics.org

댓글

이 블로그의 인기 게시물

전단응력 (Shear Stress)

표면장력 공식

엑셀 상자그림(Box Plot) 그리기