3D Graphics/공통

알려진 평면에서의 폴리곤과 정점의 교차판정.

rajent 2008. 10. 23. 19:54
728x90
Real time Randering 2nd에서 참고했습니다.

이론을 간단히 설명하자만 점이 폴리곤 내부에 있다면 점과 각 점점을 이루는 내각의 합이 360이라는겁니다.

예를들면 세 정점 p1, p2, p3로 이루어진 폴리곤이 있을때 정점p와의 각도를 계산합니다.

1. p1-p와 p2-p의 벡터가 이루는 각
2. p2-p와 p3-p의 벡터가 이루는 각
3. p3-p와 p1-p의 벡터가 이루는 각

자 그런데 각도는 어떻게 계산하느냐?? 그건 벡터의 성질을 이용하면 간답합니다.

1번 상황에서 p1-p간의 벡터를 A라하고 p2-p간의 벡터를 B라 할 때...

두 벡터의 크기를 곱합니다.

그리고 그 크기가 0이 아니라면..(이때 진짜 0을 비교하시면 안됩니다.
부동소수점 정밀도 문제때문에 0.000001같이 정당한 작은 값을 비교해서 그 값보다 작으면 0이라고 가정하는겁니다.

아무튼.. 두 벡터의 크기가 0보다 크다면...
 
각도 = acos ( A dot B / 두 벡터의 크기곱)

이렇게 계산됩니다. 실제 구현한 코드는 밑에 접어놨어요~^^