invalid-file

mixing.c

계속해서 3차원에서 벡터들 돌리는 걸 생각하고 있으려니, 머릿속이 꼬여버렸다. 꼬인 두뇌구조를 풀어내기 위해 잠시 썰을 풀어보도록 하겠다.

어떤 점이 있고 어떤 직선이 있다. 직선을 회전 축으로 해서 점을 돌리는 것은 어떻게 하면 될까? 당연한 일이지만, 직선에 수직이 되는 평면중에서 점을 포함하는 평면을 하나 고른 다음에, 그 평면과 직선이 만나는 점을 원점으로 하여 주어진 점을 원하는 만큼 돌려주면 된다. 즉, 말은 쉽다.

실제로 이걸 주어진 좌표계에서 시행하려면 난감한 일이 아닐 수 없다. 하지만 현대는 인터넷 문명이 고도로 발달한 시대, 적당한 검색어(rotation, real, vector 등등) 를 사용하여 검색한 결과 간단하고 짧은 논문을 찾을 수 있었다.

Glenn Murray, "Rotation About an Arbitrary Axis in 3 Dimensions"

간단하게 요약하자면, 다음과 같다.

1. 공간 전체를 평행이동한다. 얼마나? 주어진 회전축이 원점을 지나가도록.
2. 공간 전체를 회전시킨다. 어떻게? 주어진 회전축이 xz평면에 포함되도록 z축을 중심으로.
3. 공간 전체를 회전시킨다. 어떻게? 주어진 회전축이 z축과 같아지도록 y축을 중심으로.
4. 주어진 점을 z축에 대해 원하는 각도만큼 회전시킨다.
5. 3번에서 했던걸 반대로 한다.
6. 2번에서 했던걸 반대로 한다.
7. 1번에서 했던걸 반대로 한다.

간단하다.

물론 이걸 실제로 구현하는건 살짝 난감한 일이 아닐 수 없다. 꽤 길다. 내가 필요한건 회전축이 원점을 지나가는 것이고, 따라서 간단해진다. 그 간단해진 소스는 첨부화일로 올려두었으니 뭐 혹시 필요한 사람은 구경해 봐도 좋다.


by snowall 2006. 8. 31. 12:26