본문 바로가기

Graphics Note

[Mathematics] quaternion(사원수)

Quaternion(사원수)은 그래픽스 분야에서 꽤 중요한 녀석이다. 생소한 이름 + 익숙하지 않은 복소수 체계라는 부분 때문에 제대로 알아보기도 전에 지레 겁먹고 있던 부분이었는데, 찬찬히 살펴보니 그렇게 복잡하지도 않고, (공학자의 입장에서 '증명'이 배제되었기 때문에)그렇게 심오하지도 않을뿐더러 굉장히 흥미로운 아이임을 느꼈다. 사원수를 접한지 오래지 않았지만, 꽤 친근해져버렸다. 글을 쓰면서 조금 더 친해져보자.

 

quaternion은 19세기에 윌리엄 해밀턴(William Rowan Hamilton)에 의해 발명되었다. 그 당시 quaternion의 발견은 벡터의 개념이 도입되기 전 까지 공간을 표현하는 굉장히 획기적인 방법이었기 때문에 많은 연구가 이루어졌었다. 물론 연구의 당사자인 해밀턴은 15년이나 걸처 연구했지만, 후대의 특권으로 단숨에 깨우쳐보자.

 

복소수에 대한 포스팅(http://alleysark.tistory.com/entry/Mathematics-complex-number)에서 실수부와 하나의 허수부가 표현하는 2차원의 그래프를 보았다. 사원수의 개념은 여기서부터 시작한다. 복소수의 2차원적 표현을 확장하여 허수부 하나 j를 더 추가하면, a + ib + jc 2차원적인 그래프 표현에 하나의 축을 추가하는것이므로 3차원의 표현이 된다.(와우!) 애석하게도 복소수를 통한 3차원 표현은 i^2 = -1과 같은 허수부의 연산에 있어서 i*j와 j*i를 풀지 못했다. 많은 연구가 있은 후 허수부 하나를 더 추가하여 a + ib + jc + kd 형태의 복소수 체계로 확장시켰고(즉 4차원의 표현) 오랜 기간에 걸쳐 허수부의 관계가 정립되었다.

[math!] \begin{aligned}& \mathbf{i}^2 = \mathbf{j}^2 = \mathbf{k}^2 = \mathbf{ijk} = -1 \\ & \mathbf{ij} = \mathbf{k},\quad \mathbf{jk} = \mathbf{i}, \quad \mathbf{ki}=\mathbf{j} \\& \mathbf{ji}=-\mathbf{k}, \quad \mathbf{kj} = -\mathbf{i}, \quad \mathbf{ik}=-\mathbf{j} \end{aligned}[/math!]

두번째와 세번째 줄은 첫번째 줄로부터 확장할 수 있지만, 첫번째줄의 ijk=-1 은 어떻게 증명되는지 잘 모르겠다. (해밀턴이 다리위에서 생각해냈다곤 하는데...) 어쨋거나 이러한 결과에 더하여 세 개의 복소수 부분이 3D벡터의 카르테시안 벡터로 표현될 수 있다는 조시아 기브스(Josiah Willard Gibbs)연구는 이러한 복소수 형태를 공간으로 확장시키는 날개역할을 하였다.

 

오늘날 사원수를 표현하는 방법에는 두 가지가 존재하는데,

[math!]\begin{aligned} \mathbf{q} &= [s, \mathbf{v}]\\ \mathbf{q} &= [s + \mathbf{v}] \end{aligned}[/math!]

처음의 표현은 실수와 벡터를 따로 표현한 것이고, 두번째 표현은 실수와 벡터의 합으로 표현한 것이다. 그리고 대체로 두 번째 표현이 사원수를 표현하는 대표적인 방법이다. 스칼라와 벡터를 더한다는 부분이 이해가 안가지만 다음 표현을 보면 퍼즐의 조각이 맞춰질 것이다.

[math!]\mathbf{q} = [s + \mathbf{v}] = [s + x\mathbf{i} + y\mathbf{j} + z\mathbf{k}] [/math!]

복소수의 세 허수부가 카르테시안 벡터를 나타내므로 사원수는 3차원 벡터부와 실수부가 합쳐진 4차원의 표현을 가지는 것이다.

 

 

덧셈과 뺄셈

사원수의 개념은 의외로 간단하다. 하지만 곧장 써먹기 전에 사원수의 연산에 대해 알아볼 필요가 있을다. 사원수의 덧셈과 뺄셈은 어려울 부분이 없다. 복소수의 덧셈, 뺄셈 처럼 실수부는 실수부 끼리, 허수부는 각각의 허수부 끼리 더해주거나 빼주면 된다.

[math!]\mathbf{q_1} \pm \mathbf{q_2} = [(s_1 \pm s_2) + (x_1 \pm x_2)\mathbf{i} + (y_1 \pm y_2)\mathbf{j} + (z_1 \pm z_2)\mathbf{k}] [/math!]

수식에서 실수들의 좌 우가 바뀌어도 결과는 같다는 것은 쉽게 알 수 있다. 즉, 사원수는 덧셈과 뺄셈에 대하여 교환법칙이 성립한다. 다음으로 곱셈에 대해서 살펴보자.

 

 

곱셈

복소수의 곱셈을 기억하고 있다면(중학교 과정이었나..) 사원수의 곱셈도 별거 아니다. 그냥 죄다 곱해버리면 그만이다.

[math!]\begin{aligned} \mathbf{q_1}\mathbf{q_2} = & [s_1s_2 + x_1x_2\mathbf{i}^2 + y_1y_2\mathbf{j}^2 + z_1z_2\mathbf{k}^2 \\& + s_1x_2\mathbf{i} + s_1y_2\mathbf{j} + s_1z_2\mathbf{k} \\ & + s_2x_1\mathbf{i} + s_2y_1\mathbf{j} + s_2z_1\mathbf{k} \\& + x_1y_2\mathbf{ij} + x_2y_1\mathbf{ji} + y_1z_2\mathbf{jk} + y_2z_1\mathbf{kj} + z_1x_2\mathbf{ki} + z_2x_1\mathbf{ik}] \end{aligned}[/math!]

여기에 처음 보였던 해밀턴의 정리에 의해

[math!]\begin{aligned} \mathbf{q_1}\mathbf{q_2} = & [s_1s_2 - x_1x_2 - y_1y_2 - z_1z_2 \\& + s_1x_2\mathbf{i} + s_1y_2\mathbf{j} + s_1z_2\mathbf{k} \\& + s_2x_1\mathbf{i} + s_2y_1\mathbf{j} + s_2z_1\mathbf{k} \\ & + x_1y_2\mathbf{k} - x_2y_1\mathbf{k} + y_1z_2\mathbf{i} - y_2z_1\mathbf{i} + z_1x_2\mathbf{j} - z_2x_1\mathbf{j}] \end{aligned}[/math!]

따라서

[math!]\mathbf{q_1}\mathbf{q_2} = [s_1s_2 - \mathbf{v_1} \cdot \mathbf{v_2} + s_1\mathbf{v_2} + s_2\mathbf{v_1} + \mathbf{v_1} \times \mathbf{v_2} ] [/math!]

으로 간단하게 표현된다. 여기서 [math]s_1s_2 - \mathbf{v_1} \cdot \mathbf{v_2}[/math]가 실수부 이며 벡터값인[math] s_1\mathbf{v_2} + s_2\mathbf{v_1} + \mathbf{v_1} \times \mathbf{v_2}[/math]가 허수부를 나타내게 된다. 결과로부터 사원수의 곱셈은 교환법칙이 성립하지 않음을 알 수 있다.

 

 

magnitude

사원수의 크기는 벡터의 크기계산의 모체가 되었던게 아닐까 생각해본다(확실치 않음)

[math!]|\mathbf{q}| = \sqrt{s^2 + x^2 + y^2 + z^2} [/math!]

 

pure quaternion

실제 사원수의 쓰임은 실수부가 빠진 형태를 주로 쓰는데, 이를 pure quaternion이라 한다. 

[math!]\mathbf{q} = [\mathbf{v}] [/math!]

 

conjugation quaternion

사원수의 허수부의 부호를 반전한것. 나중에 볼 사원수 회전에서 반대방향으로의 회전을 의미한다.

[math!]\mathbf{q}^* = [s - \mathbf{v}] [/math!]

 

inverse quaternion

또 한가지 중요한 사원수의 형태는 inverse quaternion이다. 사원수에 대해 inverse는

[math!]\mathbf{q}^{-1} = \frac{[s - x\mathbf{i} - y\mathbf{j} - z\mathbf{k}]}{|\mathbf{q}|^2} = \frac{\mathbf{q}^*}{|\mathbf{q}|^2} [/math!]

이다. 이는 inverse가 보이는 형태로부터 유도할 수 있다. 

[math!] \mathbf{q}\mathbf{q}^{-1} = \mathbf{q}^{-1}\mathbf{q} = 1 [/math!]

 

unit quaternion

마지막으로 사원수이지만 그 크기가 1인 사원수를 unit quaternion이라 한다.

 

 

다분히 공학자적 측면에서의 사원수에 대한 이해지만, 적어도 이를 써먹는데에는 무리가 없어진 것 같다. 다음 글에는 사원수에 의한 회전에 대해 정리해보겠다.

 

참고 : Mathematics for computer graphics 3rd / John Vince

'Graphics Note' 카테고리의 다른 글

perspective projection  (3) 2013.07.19
[Mathematics] rotate model using quaternion  (4) 2013.07.11
[Mathematics] matrices for transformation  (0) 2013.07.09
[Mathematics] complex number  (5) 2013.07.01
유리같은 셰이딩  (0) 2013.06.25