회전 행열(Rotation Matrices)

개 요 (Introduction)

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

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

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

요 약 (Summary)

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

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

벡터(Vectors)                               v=Rv
2등급 텐서(2nd Rank Tensors) σ=RσRT
2등급 텐서(4th Rank Tensors) C=RRCRTRT

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

벡터            vi=Rijvj
2등급 텐서 σmn=RmiRnjσij
4등급 텐서 Cmnop=RmiRnjRokRplCijkl

2차원에서 R

R=[cosθsinθsinθcosθ]

여기서 θ는 회전각도이다. R은 단지 Q의 전치, 즉, R=QT 이고 Q=RT 이다.

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

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

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

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

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

RRT=I 그리고 RikRjk=δij

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

벡터의 회전 (Rotating of the Vector)

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

v=2i+9j

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

{vxvy}=[cos50sin50sin50cos50]{29}={8.184.25}

따라서 좌표변환된 벡터는

v=8.18i+4.25j

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

{vxvy}=[cos50sin50sin50cos50]{29}={5.617.32}

따라서 회전된 벡터는

v=5.61i+7.32j

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

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

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

{vxvy}=[cos(50)sin(50)sin(50)cos(50)]{29}={5.617.32}

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

v=5.61i+7.32j

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

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

R=[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)]

여기서 (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θ.

위의 모두를 종합하면

R=[cosθsinθ0sinθcosθ0001]

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

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

R=[(i의 x성분)(j의 x성분)(k의 x성분)(i의 y성분)(j의 y성분)(k의 y성분)(i의 z성분)(j의 z성분)(k의 z성분)]

여기서 "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 이먄, Ψ와 Φ의 구분이 되지 않으며, 그 둘의 합만을 포함할 수 있다.

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

R=[cosΨsinΨ0sinΨcosΨ0001][cosΘ0sinΘ010sinΘ0cosΘ][cosΦsinΦ0sinΦcosΦ0001]=[cosΨcosΘcosΦsinΨsinΦcosΨcosΘsinΦsinΨcosΦcosΨsinΘsinΨcosΘcosΦ+cosΨsinΦsinΨcosΘsinΦ+cosΨcosΦsinΨsinΘsinθcosΦsinΘsinΦcosΘ]

로우 각도 예제 (Roe Angle Examples)

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

R=[cos60cos30cos45sin60sin45cos60cos30sin45sin60cos45cos60sin30sin60cos30cos45+cos60sin45sin60cos30sin45+cos60cos45sin60sin30sin30cos45sin30sin45cos30]=[0.30620.91860.2500   0.88390.17680.43300.3536   0.35360.8660]

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

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

R=[R11R12R13R21R22R23R31R32R33]

첫째로 가장 쉬운 단계는 R33 성분을 살펴 보는 것이다. 이것은 단순히 Θ의 코사인 값, 즉 Θ=Cos1(R33) 이다.

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

R23R13=sinΨsinΘcosΨsinΘ=sinΨcosΨ=tanΨ

따라서

Ψ=Tan1(R23R13)

같은 방법으로

Φ=Tan1(R32R31)

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

다행히, 이러한 경우(Θ→0) Ψ와 Φ가 서로 구별될 수 없음을 기억하면 된다. 이 때는 Φ를 0으로 정하고, Ψ=Sin1(R21)로 계산한다.

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

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

R=[0.30620.91860.2500   0.88390.17680.43300.3536   0.35360.8660]

먼저 R33 항으로부터 Θ를 결정한다.

Θ=Cos1(R33)=Cos1(0.8660)=30

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

Ψ=Tan1(R23R13)=Tan1(0.43300.2500)=60Φ=Tan1(R32R31)=Tan1(0.35360.3536)=45

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

축 중심 회전 (Rotation About An Axis)

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


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

R=Icosα+pp(1cosα)Psinα

여기서

P=[  0  p3p2p30   p1   p2p10]

행열을 전개하면

P=[cosα+p12(1cosα)p1p2(1cosα)p3sinαp1p3(1cosα)+p2sinαp2p1(1cosα)+p3sinαcosα+p22(1cosα)p2p3(1cosα)p1sinαp3p1(1cosα)p2sinαp3p2(1cosα)+p1sinαcosα+p32(1cosα)]

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

Rij=δijcosα+(1cosα)pipjϵijkpksinα

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

Qij=δijcosα+(1cosα)pipj+ϵijkpksinα

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

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

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

R=[cosθsinθsinθcosθ0001]

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

α=Cos1[12{tr(R)1}] 

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

p1=R32R232sinαp2=R13R312sinαp3=R21R122sinα

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

pi=ϵijkRjk2sinα

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

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

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

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

R=[0.30620.91860.2500   0.88390.17680.4330   0.3536   0.35360.8660]

α에 대해서 풀면

α=Cos1{12(0.30620.1768+0.8660)1}=108

p에 대해서 풀면

p1=0.35360.43302sin108=0.0417p2=0.2500+0.35362sin108=0.3173p3=0.8839+0.91862sin108=0.9475

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

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

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

RT=R1RTR=I

내적 예제 (Dot Product Example)

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

RTR=[0.3062   0.88390.35360.91860.1768   0.3536   0.2500   0.4330   0.8660][0.30620.91860.2500   0.88390.17680.4330   0.3536   0.35360.8660]=[100010001]=I

출처 http://www.continuummechanics.org

댓글

이 블로그의 인기 게시물

전단응력 (Shear Stress)

절대압력과 계기압력

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