2009. 12. 19. 03:21 유용한 정보
Collision Detection
-
면과 점의 충돌 감지 (법선벡터를 이용한)
면과 점의 충돌 감지는 법선벡터와 평면의 방정식을 이용하면 쉽게 해결할 수 있다.
1) 면의 Normal Vector를 구한다.
Normal Vector는 3점을 알거나, 2개의 벡터를 알면 구할 수 있다.
- 3점을 알 경우 (P=Point, V=Vector, N=NormalVector)V1 = P1 - P2; //외적을 구하는데 필요한 세 정점으로 두 벡터를 만들고
V2 = P2 - P3;
N.x = V1.y*V2.z - V1.z*V2.y; //두 벡터의 외적을 구해서 Normal Vector를 만듬
N.y = V1.z*V2.x - V1.x*V2.z;
N.z = V1.x*V2.y - V1.y*V2.x;2) 평면의 방정식을 구한다.
평면의 방정식은 Normal Vector와 평면상의 한 점을 통해 구할 수 있다.
평면의 방정식은 Ax + By + Cz + D = 0 이다.
A, B, C는 Normal Vector의 x, y, z 값이고
x, y, z는 평면앙의 한 점의 x, y, z 값이다.
D는 -(Ax+By+Cz) 이다.
즉, Normal Vector를 N, 평면상의 한 점을 P라고 하면
Ax + By + Cz + D = 0 ==> N.x*P.x + N.y*P.y + N.z*P.z + D = 0
D = -(N.x*P.x + N.y*P.y + N.z*P.z)3) 이제 충돌감지의 대상이 되는 점 TargetPoint(T)과 위에서 구한 Normal Vector, D, 평면의 방정식을 이용해
충돌감지를 할 수 있다.
Normal Vector와 Target Point, 위에서 구한 D 값을 평면의 방정식에 대입하면
N.x*T.x + N.y*T.y + N.z*T.z + D = 0 이 된다.
N.x*T.x + N.y*T.y + N.z*T.z + D <= 0 인 경우 충돌 (혹은 면의 안쪽) 이라 판단하며
N.x*T.x + N.y*T.y + N.z*T.z + D > 0 인 경우는 비충돌 (혹은 면의 바깥쪽) 이라 판단한다. - 1번 방법을 큐브의 6면에 적용하면 박스와의 충돌감지
'유용한 정보' 카테고리의 다른 글
DOS 명령어 / 모든 도스 명령 목록; MS-DOS Command (0) | 2009.12.29 |
---|---|
연아의햅틱(햅틱미니)끼리의 블루투스 사용법 (0) | 2009.12.19 |
ARToolKit 설치 및 실행하기 (0) | 2009.12.19 |
MOS 아이디 찾기 (0) | 2009.12.19 |
확장자 변경하기 (0) | 2009.12.19 |