🎯 game engine/◽ 게임 수학

사원수 (Quaternion/쿼터니언)

핑크코냥 2022. 10. 27. 15:00
728x90

최대한 3D 회전에 대해서 이해하고 싶어서 서적과 구글링을 하면서 쿼터니언을 이해해보고 블로그를 작성하고 싶었는데…. 결론만 말하면 수식만 알게 되고 이해하는 건 포기했다…. ㅋㅋ

눈에 보이지 않는 4차원을 상상하기도 어렵고 4차원을 3차원으로 비유해서 수식을 짜는 것도 만만치 않았다…. 어떻게 어떻게 해서 사원 수 회전까지 갔는데 등 복각(isoclimic) 회전이 나오고…. 포기했다.

수학자 윌리엄 로윈 해밀턴이 도입한 수 체계, 복소수, 허수, 쿼터니언을 이해하기 보다는 잘 사용만 하기로 했다.

아래는 쿼터니언 이해를 포기하는 과정(?)이다. 흐흐 수식은 다 잘 적어뒀으니 도움이 되면 좋겠다.

※ 참고도서와 참고사이트를 확인하시려면 더보기를 눌려주세요

더보기

 

 

< 무리수 e >

$$y = (1 +  \frac{1}{x} )^x$$

x값이 증가할수록 y값의 증가량은 서서히 줄어드는데 x가 굉장히 커질수록 2와 3사이에 있는 어떤 특정한 수에 근접하게 된다. x가 굉장히 커졌을 때 y값은 약 2.7182818 ....에 근접하는데 이를 무리수 e라고 부른다. (오일러 상수 e, 자연 상수, 상수 e등 다양한 용어가 있다.)

이러한 무리수 e는 극한Limit과 무한대의 개념을 사용해 식으로 표현 할 수 있다. 

$$e =  \lim_{x \rightarrow  \infty } (1 +  \frac{1}{x} )^x$$

 

이러한 극한 개념이 내포된 무리수 e를 사용하는 자연지수함수 f(x)를 알아보자.

$$f(x) = e^x=\left((1+\frac{1}{x})^{x}\right)^{x}$$

< 급수 >

수열의 개념을 확장해 수열의 모든 값을 더한 것을 급수Series라고 한다. 수열의 급수는 시그마 기호를 활용해 표현한다. 

 

<매클로린 급수>

무한 미분 가능한 함수를 멱급수 형태로 바꾸는 방법을 매클로린 급수(Maclaurin series) or 테일러 급수(Taylor serious)라고 한다. 수렴하는 멱급수에서 공비 값을 x로 바꿔서 멱급수를 다음과 같은 함수 f(x)로 정의할 수 있다. 

 

<오일러 공식>

자연지수함수, sin함수, cos함수에 대응하는 매클로린 급수은 아래와 같다. 

$$ e^x=  1 + x +  \frac{1}{2!} x^2 +  \frac{1}{3!} x^3 + \frac{1}{4!} x^4 + ... $$

$$sinx=  0 + x - 0 -  \frac{1}{3!} x^3 + 0 + \frac{1}{5!} x^5 - 0 -\frac{1}{7!} x^7  ...$$

$$ cosx=  1 - 0 -  \frac{1}{2!} x^2 + 0 + \frac{1}{4!} x^4 - 0 -\frac{1}{6!} x^6  ... $$

$$cosx + sinx = 1 +  x -   \frac{1}{2!} x^2 -  \frac{1}{3!} x^3 + \frac{1}{4!} x^4+ \frac{1}{5!} x^5 -\frac{1}{6!} x^6 -\frac{1}{7!} x^7 ...$$

$$e^{ix}=  1 + ix +  \frac{1}{2!} (ix)^2 +  \frac{1}{3!} (ix)^3 + \frac{1}{4!} (ix)^4 +\frac{1}{5!} (ix)^5 + \frac{1}{6!} (ix)^6   ...$$

$$e^{ix}=  1 +  x -   \frac{1}{2!} x^2 -  \frac{i}{3!} x^3 + \frac{1}{4!} x^4+ \frac{i}{5!} x^5 -\frac{1}{6!} x^6 -\frac{i}{7!} x^7 ...$$

$$e^{ix} = cosx + isinx$$

 

복잡한 사원수를 사용하는 이유를 알아보고 사원수에 대해 알아보자. 

출처 : 이득우의 게임 수학

 

< 사원수(Quaternion: 쿼터니언) >

3차원 그래픽에서 회전을 표현할 때, 행렬 대신 사용하는 수학적 개념으로 4개의 값으로 이루어진 복소수체계이다. 네 개의 실수 성분을 가지며, 덧셈과 곱셈의 결합법칙 및 덧셈의 교환법칙을 만족시키지만 곱셈의 교환법칙은 성립하지 않는다.단일 사원수로 하나의 3차원 회전을 나타낼수 있고, 회전의 보간을 수월하게 계산할 수 있다.

실수 네 개의 순서쌍 q = ( x, y, z, w ) = ( q1, q2, q3, q4 )는 하나의 사원수이다. q = (u, w)로 줄여쓴다. 

 

< 사원수의 구조 > 

  덧셈 곱셈
교환법칙 (O) (X)

암기 방법: ( i -> j -> k -> i )순으로 생각하자. 
결합법칙 (O) (O)
항등원 (O) (1)
역원 (O) (켤레를 활용해 계산)

 

 

< 사원수의 벡터 >

 $$ q = w +xi + yj + zk = (w, \vec{v} ) $$

 

 

< 사원수 벡터의 곱 >

$$q_{1} q_{2} = (w_{1} + x_{1}i + y_{1}j + z_{1}k) \times  (w_{2} + x_{2}i + y_{2}j + z_{2}k)$$

$$= (w_{1}w_{2} + w_{1}x_{2}i + w_{1}y_{2}j + w_{1}z_{2}k) + (x_{1}w_{2}i + x_{1}x_{2}i^2 +x_{1} y_{2}ij + x_{1}z_{2}ik) + ( y_{1}w_{2}j +  y_{1}x_{2}ji +  y_{1}y_{2}j^2 +  y_{1}z_{2}jk) + (z_{1}w_{2}k + z_{1}x_{2}ki + z_{1}y_{2}kj + z_{1}z_{2}k^2)$$

$$=(w_{1}w_{2} + w_{1}x_{2}i + w_{1}y_{2}j + w_{1}z_{2}k) + (x_{1}w_{2}i - x_{1}x_{2} +x_{1} y_{2}k - x_{1}z_{2}j) + ( y_{1}w_{2}j -  y_{1}x_{2}k -  y_{1}y_{2} +  y_{1}z_{2}i) + (z_{1}w_{2}k + z_{1}x_{2}j - z_{1}y_{2}i - z_{1}z_{2}) $$

$$= (w_{1}w_{2} - x_{1}x_{2} -  y_{1}y_{2} - z_{1}z_{2}) + (w_{1}x_{2} + x_{1}w_{2} +  y_{1}z_{2} - z_{1}y_{2} )i + (w_{1}y_{2} - x_{1}z_{2} +y_{1}w_{2} + z_{1}x_{2} )j + (w_{1}z_{2}+ x_{1} y_{2} -  y_{1}x_{2}+z_{1}w_{2})k $$

$$= (w_{1}w_{2} - ( \vec{v_{1}} \vec{v_{2}}), w_{1}\vec{v_{2}} + w_{2}\vec{v_{1}} + v_{1}  \times  v_{2}) $$

 

사원수에서 실수부가 0인 사원수를 순허수 사원수라고 부른다. 두 순허수 사원수의 곱셈 결과는 외적과 내적으로만 나타낼수 있다. 

$$= (( \vec{v_{1}} \vec{v_{2}}),  v_{1}  \times  v_{2}) $$

 

 

<사원수의 회전>

2D에서는 각도가 주어져야 회전이 가능하고, 3D에서는 각도와 회전축이 필요하다. 회전축은 원점으로부터 뻗어 나가는 하나의 벡터값이 될 테니 허수축 i, j, k를 이용하면 된다. 

3차원 회전을 하는 쿼터니언 공식은 아래와 같다. 

$$p' = qpq^{-1}$$

역수를 왜 곱할까? 

사원수는 3차원 공간에서의 회전에 사용하지만 사원수 자체는 3차원 내의 축을 중심으로하는 평면상에서만 회전하는 것이 아니라 4차원으로 직교하는 두 개의 평면 상에서 같은 각도로 회전한다. 

즉, 3차원 회전에서 단지 하나의 회전축이 있어서 대응하는 하나의 평면 위를 회전했지만 4차원에서는 회전축이라는 것은 없고 원점만 공유하는 두 개의 회전면만 있다. 

그래서 왼쪽부터 사원수를 한 번 곱한 단계 q p 는 우리가 만드려는 벡터은 p'가 3차원 공간 밖으로 나온 상태가 된다. 다시 4차원상에서는 역방향 회전이 되지만 3차원에서는 최조의 회전과 같은 방향이 되는 회전을 오른쪽부터 더하여 4차원에서의 회전을 없애는 것이다. (사실 정리하면서도 무슨 말인지 모르겠다...........)

sin함수, cos함수를 매클로린 급수로 전개 했을 때 세 급수가 서로 통합되기 위해서는 크기가 1이고, 제곱한 수가 -1이 되는 특별한 수가 필요함을 알 수 있었다. 복소수 체계에서 이 조건을 만족하는 특별한 수인 허수를 i를 사용해 다음의 오일러 공식을 전개 할 수 있다.

$$e^{i\theta } = cos\theta  + isin\theta  = (cos\theta , sin\theta )$$

사원수에서도 허수 i와 동일하게 크기가 1이고 제곱한 값이 -1인 수가 있다면 오일러 공식을 만족하는 것이다. 

$$e^{\vec{n} \theta } = cos\theta  + sin\theta\vec{n}  = (cos\theta , sin\theta \vec{n} )$$

이 형태의 사원수는 4차원 공간에서 회전축 벡터n을 중심으로 회전 변환하는 성질을 가지는데, 이름 회전 사원수(Rotation quaterinon)라고 한다. 

$$q = cos\theta  + sin\theta\vec{n} = cos\theta + sin\theta(ai+bj+ck)$$

 

 

<회전 사원수를 이용한 3차원 공간에서의 회전>

일반적으로 사용하는 3차원 공간의 벡터v는 순허수 사원수에 대응되는 개념이다. 벡터v의 값을 (x, y, z)로 표시하고, 회전축 벡터n의 값을 (a, b, c)로 지정해보겠다. 회전축은 단위 벡터이기 때문에 

$$a^2+ b^2+c^2 = 1$$

의 조건을 가진다. 그리고 회전축 벡터n으로 각 세타만큼 회전시키는 회전 사원수 q는 

$$ (cos\theta , sin\theta \vec{n} )$$ 의 값을 가진다. 

이렇게 구한 회전 사원수로 점들을 회전시킬수 있다. 

회전 사원수 q를 사용해 벡터를 회전시키는 방법은 회전 사원수를 벡터의 왼쪽에 배치하고 둘을 곱하는 것이다. 이때 사원수의 곱셈은 교환법칙이 성립하지 않기 때문에 곱하는 순서에 항상 신경써야 한다. 

계산 결과를 보면 회전 사원수와 벡터를 곱한 결과는 네 요소를 모두 사용하는 일반 사원수가 나온다. 따라서 이 곱의 결과는 순허수 사원수와 1:1로 대응했던 3차원 공간의 규격에서 벗어나게 되므로 3차원 공간의 요소로 사용할 수 없게 된다. 3차원 공간에서 벡터를 회전시키는 용도로 사원수를 사용하기 위해서는 사원수 곱의 결과가 항상 순허수 사원수가 되는 특별한 수식을 발견해야 한다. 이를 만족시켜주는 회전 사원수의 곱의 형태는 아래와 같다. 

$$p' = qpq^{-1}$$

그냥 받아드리자.. 

728x90