[Graphics] 3/27

오늘 해야 할 부분은 학생들이 많이 어려워하는 부분이에요.
지금까지는 벡터 스페이스에서 일어나는 일들을 배웠어요.
무슨 이야기냐면, linear한 space에서 일어나는 일만 배웠죠.
하지만 여러분이 가지고 있는 직관을 그대로 적용하면, 대부분 다 틀립니다.
여러분이 갖고 있는 선입견을 다 비워버리고, 새로 채우는 작업을 할 겁니다.
막연히 갖고있었던 선입견을 다 빼버리는게 먼저예요!
내가 말하는 대로 받아들일 수 있도록 여러분의 머리를 말랑말랑하게 만드는 과정이 필요합니다.

What is Rotation

회전이 뭐예요?
고정된 점을 중심으로 회전하죠.
회전이라고만 이야기하면, 회전의 중심점을 기준으로 돕니다.
3차원에서는 언제나 회전 축이 존재하고, 그것을 중심으로 회전하죠.
언제나 하나의 고정된 축이 존재해요.
어디론가 이동하지 않습니다.
차원이 올라가도 똑같아요.
2차원에서도, 고정된 점이라는 게 고정축이라고 생각할 수 있죠.
회전에서는 항상 축과 각을 생각합니다.

하지만 항상 교과서를 보면, 회전을 표현하는 다양한 방법이 주어집니다.
이게 뭘 의미해요?
여러가지 방법들이 교과서에 등장한다는 게 무슨 뜻이에요?
뭐 하나 마음에 드는 게 없을 때 그래요.
뭘 하나 골라도 마음에 안 드는 거죠.
그래서 이런 거에요.

Rotation vs Orientation

rotation이라고 하면, 회전이죠.
orientation은 물체가 놓인 상태를 이야기하죠.
만약에 reference coordinate system이 정의되면,
rotation으로 orienation을 표현할 수 있죠.

이렇기 때문에, 대부분의 교과서에서 이 둘을 구분하지 않습니다.
하지만 섞어 쓰면, vector와 point를 섞어 쓰는 것과 같은 문제가 생깁니다.
따라서 우리는 이 둘을 분리할 거예요.

각도를 표현할 때, 어딘가 건너뛰는 범위가 생깁니다.
계속 회전하고 있을 때, 0, pi, 2pi, 0. 2pi에서 0으로 갑자기 뛰게 되죠.
descrete한 점프가 있죠.
이러면 문제가 뭐죠?
-pi, pi가 서로 같아요.
이 둘을 더해서 평균을 내면, 0이 되어버리죠.
그렇지 않고 0, pi, 2pi, 3pi… 로 바꾸면, 한 방향을 표현하는 방법이 늘어나버리죠.

표현에 따라서 방법이 다양해지죠.
그래서 계산이 잘 정의되도록 해야해요.
어떻게 할까요?

나를 둘러싼 하나의 원을 생각해봅시다.
그 원 위의 좌표는 회전에 따라서 연속적으로 움직입니다.
dimension은 1이기 때문에 하나의 parameter로만 표현할 수 있습니다.
하지만 이런 경우 descrete 혹은 one to many를 해결할 수 없어요.
하지만 하나의 parameter를 늘리면 이것을 해결할 수 있습니다.

complex number

여러분들이 아는 저런 연산은 복소수 곱하기 연산입니다.
x+iy = e^(i*𝜃)

exponential을 geometric하게 표현하는 방법인데,
linear한 function에서 unlinear한 곳으로 매핑을 해주죠.
nonlinear space에서는 더이상 더하기는 할 수 없고, 언제나 곱하기를 해주죠.
𝜃만큼 이동을 하고, 𝜙만큼 이동을 하는 것도 곱으로 표현되죠.

2D Rotation

composition에는 그렇지 않지만,
orientation에는 복소수로 표현하는게 적합합니다.
회전에 있어서, 시계 반대 방향으로 반바퀴 도는 것과, 시계 방향으로 반바퀴 도는 것은 결과가 같습니다.
하지만 과정이 다르죠.
geometry를 나타낼 때는 polar angle을 쓰는게 맞고요.

본질적으로 구분하는 이유는, 계산에 문제가 생기기 때문입니다.
본질을 훼손하는 경우에는 문제가 생겨요.

3D Rotation

3차원은 지저분하고 복잡해요.
이거에 관련된 수학을 들여다보기 시작하면 한도끝도 없이 복잡해요.
거기에 흠뻑 빠져버리면 진짜 봐야 할 것은 못 보거든요.
그래서 가능하면 기하학적인 직관에 의존해서 이야기 할 겁니다.
수식에 빠져들지 말고, 직관에 의존하라구요.
다행인 거는 수학은 지저분한데, 직관은 편안해요.

예전에 배웠던 것처럼, 회전을 통해서 어떤 곳으로 도착할 수 있어요.
하지만 그 orientation 축을 눈으로 찾기는 만만치 않아요.

두개의 orientation이 주어지면 한번에 가는 방법이 있습니다.
언제나 그래요.
그 논리를 사용하면 둘 간의 rotation을 찾을 때.
본질은 축과 각입니다.

가장 먼저 이야기한 사람은 오일러입니다.
Theorem. 어떤 강체를 움직일 때 한 점이라도 제자리에 있으면 회전이다.

rotation vector: 벡터의 크기만큼, 벡터가 가리키는 곳을 축으로 회전.

Using an Extra Parameter

Euler angle.
4개의 파라미터로 나타낼 수 있다!
그것을 발표하고 오일러는 죽어버렸습니다.
근데 당시에는 그거 가지고 뭘 할 수 있는지 몰랐어요.
100년쯤 지나고 나서 그걸로 뭘 할 수 있는지 알게 되기 시작했어요.
해밀턴.
20대 때 처음 푼 문제가 : Algebraic coules.
숫자 두 개 가지고 곱하기.
나중에 알고보니 이 사람이 만든 숫자는 복소수였죠.
그러고 나서 이 사람이 뭘 했겠어요?
당연히 3개 가지고 곱하려고 했는데 이런 구조가 안 나오는 거에요.
이 시점에의 history를 알아야 하는데,
이 당시 사람들은 cross product에 대해서 알고는 있었지만 3차원에서밖에 정의되지 않는다는 점이 받아들이기를 주저하게 했죠.
general한 숫자 곱하기를 만드는 게 굉장히 중요했습니다.
그것을 10년동안 못 하고 있었어요.
그때 윌리암이 문득 깨달은 거죠.
3개로는 못 하는데, 4개로는 되더라.
이거는 4원수(Quaternions)라고 불립니다.
이것을 cross product의 대용품으로 사용하려고 했지만 잘 안 됐어요.
이 이후 결국 coss product를 받아들이죠.
다시 150년 후에는 Algebric geometry의 시대가 됩니다.
알고보니 이 Quarterinon이 오일러의 4 parameter였나봐!가 됩니다.
그 덕분에 현대에 와서는 더이상 옛날 식의 수학적 rotation은 잘 안 쓰게 됩니다.
1800년대가 기점인 것 같아요.

여튼 우리는 Unit quarternions를 씁니다.
다양한 표현법이 있어요.
여하튼 다향한 쿼터니온이 있는데, 우리가 관심 있는 것은 길이가 1인 녀석입니다.
4차원이 필요한 게 아니라서, 조건을 하나 추가한거죠.
기하학적으로 보면 4차원 공간 속에 들어있는 3차원의 구입니다.
unit hyper space상에서 표현되는 하나의 점.
그게 나의 orientation과 매핑되는 거에요.
이 space를 S3라고 표현합니다.
S1는 점, S2는 원, S3는 구.
사실 어떻게 그릴 방법이 없어요.
2차원상에 그릴 방법이 없으니까요.
약간 이해할 수 있게 설명을 할텐데, 뒤를 보기로 하죠.

Rotation about an Aribtrary Axis

딱 한번 증명이 필요하긴 합니다마는, 안 하고 넘어갈 거에요.
쿼터니온으로 회전을 할 때는 앞에 쿼터니온, 뒤에는 그 역함수를 곱하게 합니다.
하지만 곱해지는 녀석이 3차원 실수기 때문에, 실수부가 0인 쿼터니온으로 해석해서 연산합니다.
분야마다 다르게 부르긴 하지만, Puerly Imaginary Quarterinon이라고 합니다.
quarterinon rotation 증명 찾으면 나옵니다.
이걸 받아들이고 나면 그 다음은 편하게 나옵니다.

inverse는 여러가지가 나오는데, (w, -x, -y, -z) = (-w, x, y, z).
inverse를 만들 때, 𝜃를 반대로 돌릴 수 있죠.
sin값은 뒤집어지게 돼요.
혹은 -v를 가지고 할 수도 있고, 그게 후자에요.

쿼터니온은 곱과 역에 닫혀있고요.

쉬운 증명인데, q가 나타내는 로테이션과, -q가 나타내는 로테이션은 같습니다.
축과 각을 동시에 뒤집으면 같은 회전이 되죠.

SO(3)는 orientation과 1 to 1 mapping입니다.
S^3는 2 to 1의 문제가 있습니다.

real space와 각도가 두 배 차이나니까, 𝜃/2를 씁니다.

다음 번에는 기하학적으로 어떻게 동작하는지에 대해서 배울 거에요.