2010-11-19 5 views
4

나는 지금 당황 스럽지만 충돌 탐지를 위해 직사각형으로 작업하는 데 익숙하다. 나는 다이아몬드와 같은 모양으로 작업하고 있으며 지난 몇 시간 동안 충돌을 확인하는 방법을 알아 내려고 노력했습니다. 직사각형 이외의 모양으로 충돌 ..?

는 내가 처음 네 개의 점은 두 번째 객체의 점 안에있는 객체 있는지 확인했는데, 그건 그냥 상자 (내 생각)을하게

내가 어려움에 봉착 같은 느낌 이유 이것은 각도 때문입니다.

+0

한 모양의 두 점 사이의 선이 다른 모양의 두 점 사이의 선과 교차하는지 확인할 수 있습니다. 도형의 모든 인접 노드를 반복 할 수 있습니다. 모양이 주변에 있지 않으면 가장 정확한 충돌 감지를 제공합니다. – bhavinp

+0

@bhavinp 알겠습니다. 그러면 라인 충돌을 확인하는 가장 좋은 방법은 무엇인지 알아야합니다. 나는 일종의 경사면을 사용해야한다고 생각하고 있나? –

+0

@Robert Fratto 두 점을 사용하여 선분을 만드는 함수를 만듭니다. 그런 다음 해당 선분이 교차하는지 테스트하는 다른 함수를 작성하십시오. 이것은 간단한 선형 대수학이어야합니다 또는 당신은 아마 이것을 도울 온라인 자원을 찾을 수 있습니다. 그런 다음 두 도형의 각 정점에 인접한 점을 테스트하기 만하면됩니다. – bhavinp

답변

10

움직이는 볼록 다각형 ("다이아몬드")을 다른 움직이는 볼록 다각형과 충돌 시키려고합니다. 맞습니까? 이런 식으로 뭔가 :

one diamond moving with difference of velocities, other diamond stationary

는 그런 다음 이동을 변환 할 수 있습니다

two moving diamonds

당신의 첫 번째 단계는 다각형 중 하나가 정지되는 동등한 하나에 문제를 변환하는 것 다각형을 이동하는 다각형에 의해 스윕되는 영역을 덮는 "샤프트"로 변환합니다. 이는 원래 폴리곤이 n면을 가진다면 샤프트는 n + 2면을 가지며 여분의 두면은 이동 벡터와 길이 및 방향이 동일합니다. 이동 벡터와 직각 인 구성 요소에 따라 정점을 정렬하고 새 변을 최대 점에 삽입하여 이러한 새면을 삽입 할 위치를 찾습니다.

the moving polygon transformed to a shaft

이제 정적 다각형에 대한 정적 다각형 문제를 감소했습니다. realtimerendering.com의 편리한 table of collision algorithms을 살펴보고 참조를 따르면, 분리 축 검사를 사용해야 함을 알 수 있습니다 (예 : this paper, 3 절, David Eberly).

:

이차원

개의 볼록 다각형은 우리가 분리 축 같은 하나 다각형 라인의 한쪽에 해당하는 라인 및 기타의 다른 다각형을 찾을 수 있다면 교차하지 two convex polygons and an axis that separates them

방향이 주어지면 그 방향으로 진행하는 분리 축이 있는지, 두 폴리곤을 그 방향에 수직 인 선에 투영하고 투영이 있는지 확인하여 쉽게 발견 할 수 있습니다 분리형 :

two convex polygons projected onto a line are disjoint, showing the existence of a separating axis

분리 축이 어느 방향으로 실행되는지 어떻게 알 수 있습니까? 음, 분리 축이있는 경우 볼록 다각형 중 하나의면 중 하나에 평행 한면이 있습니다 (Eberly, 3 페이지 참조). 따라서 검사 할 방향이 조금 밖에 없으며 분리 축을 찾지 않고 모두 확인한 경우 두 개의 다각형이 교차합니다 (따라서 원래의 움직이는 물체가 충돌합니다).당신은 거부 할 수 있도록

  1. 전체 이동 다각형/다각형 테스트를 수행하기 전에, 원처럼/원을 간단한 테스트를 : 당신이 할 수 개선 및 최적화를 많이, 확실히 이들에 제한되지가 있습니다

    쉬운 케이스 빨리.

  2. quadtree와 같은 일종의 공간 파티셔닝 체계를 사용하면 충돌 할 수있을만큼 근접한 오브젝트 만 테스트 할 수 있습니다.
  3. "캐싱 증인"- 라인이 시간 t에서 두 개체를 분리하는 경우, 그것은 당신이 발견 축 분리를 기억 지불하고 그것을 시도 할 수 있도록 시간 t + δ에서 구분 계속 가능성이 높습니다 처음 다음 번에 (Fast Collision Detection of Moving Convex Polyhedra "Graphics Gems IV에서 Rabbitz을 참조하십시오.)

최적화에 대해 너무 걱정하지 마세요. 나중에 속도를 높일 수 있다는 확신을 가지고 올바르게 시작하십시오.