오다기리 박의 알고리즘 노트

회전 행렬 (Rotation Matrix) 과 사원수(Quaternion) 본문

컴퓨터 그래픽스/메쉬 기하학

회전 행렬 (Rotation Matrix) 과 사원수(Quaternion)

오다기리 박 2023. 11. 23. 19:33

3D 공간에 있는 어떤 물체(점p)를 원점O 기준으로 회전 시키는 상황을 생각해보자.

 

 

 

 

 

 

회전 행렬(Rotation Matrix)을 이용한 회전

길이가 1인 회전축 u를 기준으로 반시계 방향으로 θ 만큼 회전할 때 3차원 점 p에 곱해야 할 3x3 행렬은 다음과 같이 계산된다.

 

 

 

 

특히, 축 x = (1, 0, 0), y = (0, 1, 0), z = (0, 0, 1) 을 기준으로 하는 회전 행렬은 계산해보면 각각 다음과 같다.

 

 

 

 

모든 회전 행렬은 직교 행렬이다. 이러한 직교 행렬은 다음 성질들을 갖는다.

 

 

1. 열 벡터 또는 행 벡터는 모두 단위 길이이다.

 

 

 

 

 

2. 열 벡터끼리 또는 행 벡터끼리는 서로 수직 관계를 갖는다.

 

 

 

 

3. 직교 행렬의 역 행렬은 전치 행렬과 같다. 즉 회전 행렬의 역 변환 행렬은 다음과 같다. 

 

 

 

 

 

 

사원수(Quaternion)

사원수의 개념과 성질부터 알아보자. 사원수는 복소수를 확장한 개념으로써 실수 w, x, y, z와 허수 i, j, k로 정의되는 수이다.

 

 

 

 

허수 i, j, k는 다음 조건을 만족한다.

 

 

 

 

 

표기는 q = (w, x, y, z)로 하면 된다. 특히 단위 사원수는 w2 + x2 + y2 + z2 = 1를 만족하는 사원수 를 말한다.

 

 

사원수 곱셈과 관련된 법칙은 다음과 같다.

 

 

 

 

단위 사원수(Unit Quaternion)를 이용한 회전

단위(unit) 사원수는 특히 어떤 형태의 3차원 회전이든 자유롭게 표현 가능하고 여러 개의 방향들 사이를 안정되게 보간하는 데도 사용될 수 있다. 처음에 제시한 그림과 같은 상황에서, 길이가 1인 회전축 u를 기준으로 반시계 방향으로 θ 만큼 회전할 때 사용되는 사원수는 다음과 같이 계산된다.

 

 

 

 

 

예를 들어 (1,1,1)축으로 60도 회전하는 사원수는

 

가 된다.

 

 

회전시킬 점 p = (p1, p2, p3)를 회전 사원수로 회전시켜 p' = (p1', p2', p3')를 얻는다고 하면 다음 식이 성립한다.

 

 

 

 

예를 들어 점 p = (1, 1, 0)을 x축 기준으로 90도 회전시키기 위한 식은 다음처럼 계산된다.

 

 

 

 

 

단위 사원수도 3x3 회전 행렬로 변환하여 점의 좌표에 적용할 수도 있다. 단위 사원수  = (w, x, y, z) 에 대응되는 회전 행렬은 다음과 같다.

 

 

 

 

 

 

회전 행렬 vs. 단위 사원수 

회전시킬 좌표에 회전이 반복하여 적용되는 경우를 생각해보자. 회전 행렬을 반복하여 연산하는 경우에는 3x3행렬을 서로 곱해야하기 때문에 곱셈 연산의 수가 27번 일어난다. 반면 사원수를 반복하여 연산하는 경우에는 사원수끼리 곱해야하기 때문에 곱셈 연산수가 16번으로 회전 행렬보다 반복 계산에 효율적이다.

 

 

또한 회전 행렬은 계속 곱하다 보면 수치오차가 누적되어 직교행렬의 특징이 사라지고 다시 직교 행렬로 바꾸기 어려워진다. 반면 사원수는 정규화를 통해 항상 단위 사원수로 복구 가능하기 때문에 계산의 정확성 측면에서도 유리하다.