본문 바로가기

예전/3D수학

[3D 수학] 사원수(Quaternion : 쿼터니언)



1. 사원수(Quaternion : 쿼터니언)란?


- 3차원 그래픽에서 회전을 표현할 때, 행렬 대신 사용하는 수학적 개념으로 4개의 값으로 이루어진 복소수(Complex Number) 체계이다.

아래 글에선 사원수와 쿼터니언을 번갈아가며 썼다.


(잠깐! 복소수란 현재 교육과정 중 가장 큰 범위의 수로 실수부와 허수부의 합으로 구성된 수이다.)


그렇다면, 사원수를 사용하는 이유는 무엇일까?


 



- 사원수는 행렬에 비해 연산 속도가 빠르고, 차지하는 메모리의 양도 적으며, 결과의 질에 있어 오류가 날 확률이 적다.


3개의 축에 대한 회전 연산을 동시에 적용하는 경우에 행렬을 사용하면 한 축이 소실되는 김벌락 현상이 발행할 수 있는데, 사원수를 사용하면 이 현상을 막을 수 있다. (미리 말해두지만, 사실 이것도 완벽하기 막지는 못한다.)



2. 사원수의 정의


- 사원수는 4차원 복소수 공간(Complex Space)의 벡터로서 다음과 같이 나타낸다.





- 사원수를 q = s + v 형태로 쓰기도 하는데, 여기서 s 는 q의 w 성분에 해당하는 스칼라(Scalar) 값이고, v는 q의 x, y, z 성분에 해당하는 벡터(Vector) 부분이다.





3. 사원수의 특징


- 사원수의 곱은 일반적인 분배법칙을 따르며 허수 성분인 i, j, k는 다음과 같은 특징을 갖는다.



(필자의 생각)

여기서 i, j, k 는 각각 x, y, z축에 대비된다고 할 수 있다. 정확히 그 축을 말하는 것이 아니라 어떠한 물체의 3축이라는 것이다. 따라서 서로 직교 하므로 ij와 ji는 교환법칙이 성립하지 않고, 역수 관계인 것이다.

또한, 서로 외적하면 다른 축을 가리킨다. 때문에 각각의 축에 대비된다고 할 수 있다.











- 사원수는 곱셈의 교환법칙이 성립하지 않는다.



위와 같은 두 사원수 q1,q2가 있을 때, 두 사원수의 곱q1q2는 다음과 같다. 




사원수를 스칼라, 벡터 형태로 표기할 때, 


 이렇게 표현할 수 있고, 두 사원수의 곱은 다음과 같다.




이는 앞에서 나온 q1,q2의 곱의 부호를 제외하고 곱했을 때 나온 값과 같다.




- 사원수는 켤레(Conjugate)를 갖는다.




- 사원수의 역수  



그리고 아래와 같은 특징을 갖는다.




- 단위 쿼터니언을 갖는다.


q = [1, (0, 0, 0)]




단위 쿼터니언은 3D 공간에서 오일러, Axis 대신 방향을 표현한다.


쿼터니언으로 방향을 표현하려면 쿼터니언을 행렬로 변환하거나, 행렬을 쿼터니언으로 변환하는 방법이 필요하다.



3. 사원수의 회전

- 축 A에 대한 각도 Θ 만큼의 회전을 사원수로 나타내면,이다.


(이것에 대한 증명 과정은 추후 업로드 할까말까...ㅠㅜ)


이 사원수로 점 P를 회전하려면 qPq-1을 하면된다.


최종적으로 얻어진 사원수를 행렬로 변환하면, 아래와 같다.






4. 사원수의 보간


보간(interpolation)이란 처음과 끝의 값을 가지고 중간에 잇는 값을 계산해 내는 것이다.

물체의 애니메이션을 수행할 때, 보간을 통해 계산된 키프레임 사이의 중간 방향을 생성한다.


가장 간단한 보간은 선형보간(linear interpolation)으로 두 개의 값을 점으로 생각하고 두 개의 점을 이어주는 직선의 방정식으로부터 값을 얻어내는 방법이다.

두 사원수 q1,q2에 대해, 선형 보간된 사원수 q(t)는 다음과 같다.



이런 사원수는 정규화 해줘야 한다. 이 함수 q(t)는 q1과 q2사이의 호를 따라간다.



그림은 2차원 단면이나, 실제로는 4차원 단위 초구면 상의 경로를 따라간다.


이러한 선형 보간은 간단하고, 효과적이나 호를 일정한 비율로 추적하지 않는다는 문제가 있다.


여기에서 구면 선형보간(spherical linear interpolation : slerp)이 나타났다.


일단 유도과정은 생략하고 보면 다음과 같다.











쿼터니언에서 제일 중요한 것은 회전으로 이로 김벌락을 피하는 것이다.

이에 대해선 추후 업데이트 ... 하겠다. 


'예전 > 3D수학' 카테고리의 다른 글

[3D 수학] 평면  (1) 2012.09.14
[3D 수학] D3DXMatrixInverse 의 이해  (0) 2012.09.05
[3D 수학] 3D 변환 행렬  (0) 2012.09.03
[3D 수학] D3DX 행렬  (0) 2012.09.03
[3D 수학] 기본적인 행렬  (0) 2012.09.03