원과 오목 다각형이 교차하는지 어떻게 테스트합니까?


19

나는 다각형 (때로는 볼록하지만 종종 오목한)과 다른 반지름을 가진 많은 원을 가지고 있습니다. 원이 다각형과 교차하거나 겹치는 지 어떻게 알 수 있습니까?

오목 다각형을 볼록 조각으로 나눌 수 있습니다. 도움이 되겠습니까?

답변:


26

이 문제에는 두 가지 경우가 있습니다. 첫 번째는 교차점이고 두 번째는 겹칩니다 (포함).

먼저 (원 내부의 교차점 / 다각형) :

다각형의 모든 가장자리에서 원의 중심에 가장 가까운 점을 찾습니다. 중심에서 가장 가까운 점 사이의 거리가 반경보다 작 으면 교차점 또는 겹침이 생깁니다.

두 번째 (원은 다각형 전체) : 원 중심에서 오른쪽 (또는 왼쪽 / 위 / 아래)으로 광선을 쏘고 광선 / 세그먼트 (다각형 모서리) 교차점을 계산합니다. 교차 개수가 짝수이면 원이 다각형 외부에 있습니다. 홀수 원이면 안에 있습니다.

이 경우에 대한 강의에서 picter를 공유합니다.

여기에 이미지 설명을 입력하십시오

그리고 특이한 경우도 돌봐주세요.

이것이 도움이되기를 바랍니다.


편집 : 그림에 크레딧을 추가하는 것이 공평하다고 생각합니다. 저자는 Petr Felkel, 프라하 체코 공과 대학 조교수


나는 이것이 오른쪽으로 광선을 "촬영"함으로써 효과가 있다고 생각하지 않습니다. 어쩌면 내가 당신의 접근법을 잘못
읽었을

2
예. 그러나 이것은 첫 번째 경우에 설명되어 있습니다. Shooting ray는 Polygon 포함 원만 해결합니다 (내 설명에서는 두 번째 경우). 두 경우 모두 테스트해야합니다. 빠르고 구현하기 쉽고 메모리가 필요하지 않습니다.
Notabene

1
"edge"를 "vertex"와 혼동하여 첫 번째 확인을 잘못 해석하여 죄송합니다. 그것을 올바르게 읽을 때, 그것은 작동합니다 :)
bummzack

7

첫 번째 단계는 오목한 다각형을 여러 개의 볼록한 다각형으로 분할하는 것입니다. 그 이유는 볼록 다각형에서만 작동 하는 분리 축 정리를 사용 하기 때문입니다 .

SAT 자체는 2 개의 볼록 다각형에서만 작동합니다. 이름에서 "분리 축"은 다각형의 가장자리에 수직 인 축을 나타냅니다. 불행히도 서클에는 무한한 수가 있습니다. 그러나 다각형의 꼭짓점을 가로 지르기 위해 바깥쪽으로 돌출하는 것을 보면 어떤 축이 관련이 있는지 쉽게 찾을 수있는 방법이 있습니다.

Metanet Software (N / N + 제조업체)는 전체 알고리즘을 다루지 않고 SAT를 사용한 충돌 감지에 대한 유용한 자습서를 제공 합니다. 세 번째 섹션은 객체 중 하나가 원일 때 SAT를 다룹니다 .


오목 다각형을 볼록 다각형으로 분할하기위한 참조가 있습니까? 귀하가 제공 한 SAT 링크에 대해서는 언급하지 않았습니다.
ehsanul

이것은 실제로 다각형의 지오메트리에 따라 매우 복잡한 문제이지만 하드웨어는 일반적으로 다각형이 아닌 동일 평면의 사각형과 삼각형 만 렌더링 할 수 있기 때문에 모든 3D 엔진이이를 수행합니다.
SplinterReality

1
@ehsanul : en.wikipedia.org/wiki/Polygon_triangulation 은 몇 가지 인기있는 접근 방식을 설명합니다.

0

여기 내가하는 일이 있습니다.

  1. 수평 선 테스트를 사용하여 원의 중심이 다각형 안에 있는지 감지합니다. 그렇다면 교차합니다.
  2. 그렇지 않은 경우 다음 사례를 확인하십시오. 다각형의 각면
    1. 다각형 쪽의 기울기를 구합니다
    2. 수직 경사 계산
    3. (이 점을주의 깊게 읽으십시오)면을 만드는 꼭지점과 교차하는 다각형면의 경사면이있는 선과 원의 중심을 교차하는면의 경사면에 수직 인 경사 선 사이의 교차점을 찾으십시오.
    4. 설정된 교차점이 원 안에있는 경우 이는 특정 지점의 원이 해당 측면을 교차하므로 다각형과 교차 함을 의미합니다.
  3. 마지막으로, 결정적인 것이 없다면 다각형의 정점이 원 안에 있는지 확인하십시오 (이전 테스트 때문에 한 번만 확인하면 됨) 그렇다면 교차합니다. 그렇지 않다면 결정적으로 그렇지 않다고 말할 수 있습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.