2D 객체 정렬 경계 상자 교차 테스트


9

두 개의 객체 정렬 경계 상자가 있습니다 (즉, 축이 정렬되지 않고 객체와 함께 회전합니다). 두 개의 객체 정렬 상자가 겹치는 지 알고 싶습니다. ( 편집 : 참고-축 정렬 경계 상자 테스트를 사용하여 먼 거리의 객체를 빠르게 버려서 쿼드 루틴이 조금 느리더라도 중요하지 않습니다. )

내 상자는 4 개의 x, y 포인트로 저장됩니다. 답을 찾아 보았지만 예제에서 변수 이름과 알고리즘을 이해하여 특정 사례에 적용 할 수 없습니다.

누군가가 명확하고 간단한 방법 으로이 작업을 수행하는 방법을 보여줄 수 있습니까? 감사. (특정 언어는 중요하지 않습니다. C 스타일 의사 코드는 괜찮습니다.)

답변:


5

어디를 봐야하는지 쉽게 알 수 있습니다. 당신은 oobb를 찾고 있습니다. 여기로 이동 : http://www.realtimerendering.com/intersections.html를 .
이 사이트 http://www.geometrictools.com/LibMathematics/Intersection/Intersection.html에 대한 링크가
있으며 올바른 코드가 있습니다. (ctrl + f "상자의 교차점 (2D)")

SAT를 사용하며 소스 코드와 기사를 포함합니다.


geometrictools가 설명하는 알고리즘은 내가 지적한 것입니다.
Jari Komppa

나는 이것이 4 년 전이라는 것을 알지만 항상 공감 비와 그 모든 것을 설명합니다. 이것은 꽤 "당신의 대답은 다른성에 있습니다"이며, 이제 두 번째 경우에는 대답이없는 것처럼 보입니다.
Yann

2

더 쉬운 방법은 상자 B의 각 정점을 상자 A의 각 측면에 대해 테스트하는 것입니다 (서명 거리 계산). 이 방법으로 각 정점을 세그먼트의 "앞"또는 "뒤"로 분류 할 수 있습니다.

B의 모든 정점이 A의 세그먼트 중 하나의 "전면"으로 분류되면 B와 A는 겹치지 않습니다. 그렇지 않으면 그렇습니다.

이것은 다소 관련이 있으므로 사각형의 경계 원을 사용하여 먼저 원 원 검사를 수행하여 성능을 얻을 수 있습니다 (사소한 계산)


먼저 축 정렬 경계 상자 테스트를 수행하여 먼 물체를 빠르게 버립니다. 쿼드 쿼드 테스트에 대한 자세한 내용이 있습니까?
AshleysBrain

동일한 변환으로 두 쿼드를 일시적으로 회전시켜 그 중 하나가 축 정렬되도록합니다. 그런 다음 언급하지 않은 SAT 테스트를 사용하십시오. 결과가 발견되면 회전을 반대로하여 다시 가져옵니다.
Steve H
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.