1. 오일러 각오일러 각은 강체가 놓인 방향을 3차원 공간에 표시하기 위해 있는 세 개의 각도이다.
1) 짐벌락 (Gimbal lock)
이 현상이 발생하는 이유는 일단 오일러각은 특 징상 세축이 종속적이기 때문에 발생한다.
오일러 각을 이용해 강체를 회전하다 보면 두 개의 축이 거의 일치하여 회전이 2축으로 한정되는 사태를 이야기합니다.
이 현상은 자이로스코프라는 기기를 보면 현상을 쉽계 알 수 있습니다.
이 현상을 최소화 하려면 특정 축이 90가 되지 않거나
종속 구조를 바꾸는 방법이 있습니다.
그림으로 표현하기가 힘들어 유튜브에 좋은 영상이 있어 링크를 남깁니다.
2) 오일러각이 두 축에 회전에 대해서 보간이 성립하지 않는 이유
일단 이유는 오일러 각에서는 회전을 세 축으로 나누어 계산하기 때문이다.
특정 각들을 x -> y -> z 순으로 회전했다고 생각해보면
X 축을 먼저 회전 시킨 값에 Y 값을 회전 하고 마지막으로 Z 축 회전을 한다.
이걸 수학 공식으로 풀어보면
일단 X, Y, Z 축 순서대로 각각 (60, 20, 0) 그리고 (10, 20, 0) 도씩 회전 시켰다고 보면
(행렬 계산을 간략화 표기 I = Identity)
이기 때문에 일방적으로 생각하는 (70, 40, 0) 도 회전 시켰다와는 다른 값이 나온다.
만약
와 같이 계산한다면
(70, 40, 0) 도 회전과 똑같을 것입니다.
2. 로드리게스 회전 공식
임의의 축에 대한 회전을 구현하기 위해 사용한다.
먼저 여기서 벡터의 투영이 쓰이기 때문에 벡터의 투영 공식을 간단히 적어 놓았다
일단 r의 벡터를 구하기하기 위해 P 의 점에서 O의 점을 뺀다.
그 다음 r 벡터에 OO' 벡터를 빼주면 O'P 벡터가 나올 것이다.
다음은 좀 보기 편하게 임의의 축과 평행인 상태에서 바라보면 다음과 같을 것이다.
위에서 OO' 벡터를 구했고 이제 q와 h 벡터만 구하면 회전 이동하는 벡터를 구할 수 있을 것이다.
q 벡터는 벡터의 투영 공식으로 구할 수 있다.
일단 O'P 벡터를 정규화 하고 거기에 O'P' 벡터의 크기와 회전한 양
를 곱해주면
q 벡터를 구할 수 있다.
여기서 O'P 벡터의 크기와 O'P' 벡터 의 크기는 같기 때문에
의 결과로 보면 된다.
다음 으로 h 벡터를 구하기 위해서는 해당 벡터의 방향이 필요한데 다행이게도
n 벡터와 O'P 벡터를 외적하면 해당 방향과 같은 방향을 구할 수 있다.
(이때 외적하는 순서를 주의해야한다.)
로 간단하게 수식을 간략화 하여 구할 수있다.
마지막으로 OO' + q + h 벡터들을 모두 더해주면 될 것이다.
그럼 위의 마지막 결과와 같은 식이 완성된다.
로드리게스 회전 공식이 처음 들었을 때 이해가 잘 가지 않았던 게
이걸 어디에 사용하는 거지? 그리고 뭐가 우리가 알고 있다고 주어진 값들이지?
라는 걸 잘 몰라서 어려웠습니다. 하지만 다시 천천히 해보니 생각보다 금방 풀렸습니다.
물론 사용을 하지 않다 보면 잊어버릴 수도 있겠지만 나중에 다시 보면 금방 이해할 것 같습니다.
3. 평면의 방정식
평면을 구성하기 위해서는 어떠한 공간에 최소 점 3개가 있어야한다.
위의 공식은 간단하게 볼 수 있습니다.
어느 면의 임의의 점 P - P0 는 면의 방향 n 노멀 벡터와 내적하면 직교하기 때문에
0의 값이 나오게 됩니다.
크기가 1인 벡터와의 내적은 투영한 벡터의 크기이다.
그리고 원점에서의 평면까지의 길이이기도 합니다.
즉 위의 d 값은 원점으로 부터의 거리에서 음수를 취한 값입니다.
이때 d 값의 특징이 있는데
1) d의 값이 음수인 경우: 면의 방향이 원점을 향함
2) d의 값이 양수인 경우: 면의 방향이 원점에서 멀어진다.
3) d의 값이 0이라면 면이 원점을 지난다.
4. 카메라의 프러스텀을 이루는 6개의 면의 방정식
여기서 near 의 값이 10이고 far의 값이 100 이라고 가정하고 면의 방정식을 만들어 보겠습니다.
일단 near에 해당하는 면을 1번 면이라고 가정하고 보면 (0, 0, -10)으로 볼 수 있습니다.
프러스텀의 면들은 전부 바깥 쪽을 향하고 있어야 하기 때문에
노멀의 값이 (0, 0, 1)입니다. 그리고 d의 값이 필요한데 -d 값이므로
평면의 방정식은 z + 10 = 0 이 될 것입니다.
그 다음 far에 해당하는 2번 면을 보면 노멀은 (0, 0, -1)이 될것이고
-d의 값은 -100 이 될 겁니다. 즉 평면의 방정식은 -z-100 = 0 이 될 것입니다.
그리고 나머지 3번 4번 면과 위의 그림에서는 보이지 않는 5번 6번 면이 있습니다.
일단 나머지 면들은 모두 원점을 지나기 때문에 d의 값이 0입니다.
이제 노멀의 값을 구해야 합니다. 일단 3번 면으로 구해 보겠습니다.
만약 해당 면의 임의의 점
이 있다고 하면
노멀 벡터는 90도 돌린거기 때문에
의 형태가 됩니다.
여기서
이기 때문에
노멀 벡터는
이 될것 입니다.
즉 해당 평면의 방정식은
이 될것입니다.
나머지도 이런 식으로 계산하면
4번 면의 방정식은 방향만 반대 이기 때문에
5번과 6번은 단지 x, y 축을 이용하기 때문에
5번 면의 방정식은
마지막으로 6번 면의 방정식은
의 결과가 나올 것입니다.
마지막 4번은 정답인지는 모르겠지만 일단 이해한데로 풀어봤습니다.
그럼 y축으로 90도 회전을 로드리게스 회전 벡터로 어떻게 나타낼수 있을까요?
답글삭제감히 제 생각으로는 theta 가 90도라서 q벡터가 0이므로 oo`+h만 하면 r`을 찾을 수 있을거 같습니다.!
삭제