posted by WizardMania 2014. 10. 27. 11:59

게임에서 사용하는 충돌 박스(직육면체)의 경우 두종류로 분류할 수 있다. 


AABB (Axis Aligned Bounding Box)

축에 정렬된 직육면체

축에 정렬되어 있으므로 물체가 회전함에따라 경계를 다시 지정 해야한다

교차검출이 정밀하지 않다

교차검출이 간단하다


OBB (Object Oriented Bounding Box)

물체가 회전함에따라 같이 회전하게 된다

AABB보다 교차검출이 정밀하다

교차검출이 복잡하다


AABB와 OBB의 차이


     


AABB박스(초록색) OBB박스(붉은색)


AABB박스는 물체가 회전하더라도 축과정렬이되어 새롭게 범위가 지정된다.

OBB박스는 물체가 회전하면 같이 회전하게 된다.

'프로그래밍 > 수학, 물리' 카테고리의 다른 글

광선 vs 캡슐 교차검출  (0) 2014.10.27
광선 vs OBB 교차검출  (0) 2014.10.27
광선 vs 구 교차판정  (0) 2014.10.27
선분 선분 최단점과 최단거리  (1) 2014.10.22
선분 점 최단점과 최단거리  (0) 2014.10.21
posted by WizardMania 2014. 10. 27. 11:21

광선의 시작점을 o 방향을 d라 할때 광선의 수식



구의중심을 c 반지름r 구상의 임의의점을 p라 할떄 구의 수식



광선과 구의 교차를 구할려면 구의수식에서 p를 광선 r(t)로 변경하면 된다.



d를 단위 벡터라 가정하면


                                                                                     


위 식은 2차 방정식 이므로 근의 공식으로 해를 구할 수 있다. (위 식에서 b가 짝수이므로 짝수공식을 사용하면 된다) 



우리가 구한 식에서 짝수공식에 해당하는 a, b, c 는 다음과 같다.



해를 구하기 전에 판별식으로 해가 존재하는지를 확인해봐야 한다.



위 식들에의해 교차판정과 충돌지점을 구할 수 있다 . 

연산의 최적화를 위해 몇가지 고려해 볼 만한사항이 있다.


1) 광선이 구 안에서 시작할 때 무조건 교차한다고 할 수 있다.



2) 구가 광선의 뒤쪽에 있을 때 교차 하지 않을 것이다.



s가 0보다 크고 광선의 시작점이 구 밖에 있을때 구는 광선 뒤쪽에 있다고 판단할 수 있다.




'프로그래밍 > 수학, 물리' 카테고리의 다른 글

광선 vs OBB 교차검출  (0) 2014.10.27
AABB와 OBB  (0) 2014.10.27
선분 선분 최단점과 최단거리  (1) 2014.10.22
선분 점 최단점과 최단거리  (0) 2014.10.21
광선 점 최단점과 최단거리  (0) 2014.10.20
posted by WizardMania 2014. 10. 22. 14:17

3차원 공간에서 선분과 선분의 최단점(가장가까운점) 구하기



두 선분 L1과 L2가 존재할때 두선분의 최단점을 구해보자.


일단 두선분을 직선의 방적식으로 나타내면 아래와 같다.



P0과 Q0를 이은 벡터(P0-Q0)를 W0라고 하고 구한 최단점을 P(sc), Q(tc) 최단점을 이은 벡터를 Wc라고 하자


위의 직선의 방정식으로 정리하면



또한 P0 - Q0를 W0라 한다면 아래와 같이 나타낼 수 있다.



최단점을 이은 벡터 Wc는 u와 v 벡터에 직교할 것이다.



위식들을 바탕으로 연립방정식을 만들 수 있다.



수식을 간단하게 하기위해 아래와 같다라고 하고 연립방정식을 sc와 tc에 대하여 풀면된다



한가지 생각해야 할 것이 두벡터가 평행할때 이다.


이 0이라면 두벡터는 평행할 것 이다.


최종적으로 구한 sc tc값을 직선의 방정식에 대입하면 해당점을 구할수 있다.




위의 수식대로 직선의 최단점을 구할수 있다. 하지만 선분이라면 최단점이 선분의 범위를 벗어나는것을 고려해야 한다.

위의 그림처럼 최단점하나가 선분의 범위 밖에 있거나 둘다 밖에 있을수도 있다. (초록색)

이경우 선분의 시작 혹은 끝점이 최단점이 되어야한다. (붉은색)


따라서 선분범위내에 존재 하기 위해서는 sc와 tc의 의 범위가 0에서 1사이어야 한다.

0보다 작다면 선분의 시작점을 가까운점으로, 1보다크다면 선분의 끝점을 가까운점으로 해야 될 것 이다.


sc가 0일경우 Wc의 최소길이를 생각해보자

Wc는 아래와 같이 구할 수 있다.


sc는 0이므로



Wc의 최소길이를 구해야하는데 을 구하는것이 계산이 쉬워진다.




구해진 식에서 t에대한 도함수를 구하면



식을 tc에 대하여 풀면




sc가 1일 경우를 생각해 보자


구해진식에서 t에대한 도함수를 구하면



식을 tc에 대하여 풀면 



따라서 선분범위가 0~1을 벗어난다면 위의 두식으로 구할 수 있다.



'프로그래밍 > 수학, 물리' 카테고리의 다른 글

AABB와 OBB  (0) 2014.10.27
광선 vs 구 교차판정  (0) 2014.10.27
선분 점 최단점과 최단거리  (0) 2014.10.21
광선 점 최단점과 최단거리  (0) 2014.10.20
구 vs 구 교차판정  (0) 2014.10.20