2. 쿼터니온의 유래와 Angular displacement
쿼터니온은 복소수가 확장된 수로 해밀톤이란 위대한 수학자에 의해서 1843년에 발견(?)되었다.
해밀톤은 복소수가 2차원 평면에 대응된다는 것에 착안하여 3차원 공간에 대응되는 복소수와 유사한 수가 존재할 수 있으리라고 추측했다.
복소수의 실수부와 허수부가 각각 2차원 평면의 X, Y축에 대응된다면 허수부와 비슷한 역할을 하는 항을 하나 더 늘리면..
즉, 실수부 하나에 허수부를 둘로 하면 3차원 공간에 대응되는 새로운 수가 만들어 질 것으로 기대했다.
하지만 기대와는 달리 10년을 넘게 매달렸음에도 찾을 수가 없었다.
1843년 10월 16일 Dublin에 있는 Broome 다리를 건너 왕립 아일랜드 아카데미에서 열리는 회의의 참석차 가는 도중 해밀톤에게 불현듯 영감이 떠올랐고 허수에 해당하는 항을 두개가 아니라 세개로 하면 된다는 것을 깨닫게 되었다.
이때 세개의 허수들은 다음의 성질을 가진다고 가정했다.
i * i = j * j = k * k= -1
i * j = k
j * i= -k
( i -> j -> k -> i 로 순환하면서 적용됨)
해밀톤은 너무 기쁜 나머지 이 공식들을 다리에다 새기고,
새로운 수: q = a + b * i + c * j + d * k 의 이름을 '넷'이라는 의미의 quaternion 이라고 지었다.
-------------------------------------------------
쿼터니온 이라는 수의 탄생 비화(?)를 간략히 알아 보았는데..
과연 쿼터니온 이란 수도 복소수가 2차원 평면에서의 회전에 대응되듯이 3차원 공간에서의 회전이나 방향과 대응되는 성질을 가지는 것일까?
물론 답은 그렇다이다.
(아니라면 3차원 그래픽에서 이렇게 생소한 수를 사용하지도 않겠지요?^^;)
쿼터니온이 네개의 항으로 구성된다는 건 우리가 저번에 살펴본 Angular displacement 가 네개의 항으로 구성된다는 것과 우연의 일치가 아님을 짐작할 수 있다.
우선 Angular displacement에 대해서 먼저 알아보자..
Angular displacement 로 지정되는 회전행렬을 R(Θ, n)라고 하면...
(여기서 n = (nx, ny, nz) 으로 임의의 회전축을 나타내는 단위벡터이다)
임의의 벡터 r 을 축 n을 중심으로 Θ만큼 회전시킨 벡터는 Rr 이 될 것이다.
그림에서 처럼 벡터 r을 벡터 n에 수직인 성분 r⊥과 평행한 성분 r〃으로 나누면...
수직인 성분은 r 과 Rr이 만드는 면에 수직으로 지나가고, n 과 r〃에 평행한 성분은 회전후에도 변하지 않는다.
r〃 = (nㆍr)n
r⊥ = r -(rㆍn)n
r⊥은 회전하면 Rr⊥ 이 된다.
r 과 Rr이 만드는 면에 포함되고 r⊥에 수직인 벡터 V를 만들면
V = n × r⊥ = n × r 이되고,
Rr⊥ = (cosΘ)r⊥ + (sinΘ)V 라고 적을 수 있다.
그러므로...
Rr = Rr〃+ Rr⊥
= Rr〃+ (cosΘ)r⊥ + (sinΘ)V
= (nㆍr)n + cosΘ( r -(rㆍn)n ) + (sinΘ) n × r
= (cosΘ)r + ( 1 - cosΘ )n(nㆍr) + (sinΘ) n × r
이렇게 임의 회전축 n 을 중심으로 Θ만큼 회전한 벡터를 구하는 공식을 얻었다.
이렇게 조금 복잡해 보이는 공식을 구한 이유는 복소수의 경우 단위길이의 복소수를 곱한 것이 곧 2차원에서의 회전변환에 대응되듯이..
쿼터니온의 경우도 단위길이의 쿼터니온을 곱하는 것이 곧 3차원에서의 회전변환에 대응된다는 걸 나중에 보여주기 위해서이다.
▶ 3. 단위 쿼터니온과 임의축 회전의 대응