임의의 선에 대해 다각형이 모노톤인지 어떻게 테스트합니까?


16

정의 , • 다각형 평면에서이 직선에 대한 모노톤라고 L 의 경우 직교 모든 라인, L의 교차의 P 최대 두 번.PLLP

다각형 주어 , 어떤 광고가 존재하는지 결정하는 것이 가능하다 L 같은 다각형 것을 P는 에 대하여 인 단조를 L ? 그렇다면 어떻게?PLPL

이전에, 나는 물었다 관련 질문 (I 다각형이 특정 라인에 대한 모노톤인지 확인하는 방법을 질문)하지만 때 지금은 경우에 관심이 되어 있지 주어진 또는 사전에 지정했습니다.L


x 축 이되도록 좌표계를 회전 / 이동 한 다음 이전 알고리즘을 다시 실행하면 어떨까요? 추가 작업은 O ( 1 ) 에서 관리 할 수 ​​있어야합니다 . LxO(1)
HdM

4
@HdM : 라인 L은 입력의 일부로 제공되지 않습니다.
이토 쓰요시

답변:


16

것이 가능하다.

다각형을 고려하고 "오목"정점을 고려하십시오. 어떤 선이 다각형과 두 번 이상 교차 할 것인지를 정확하게 정의합니다. 다음 그림에서 금지 각도의 간격 (빨간색)을 표시했습니다. 그것들을 모아서 빨간색 디스크에 구멍이 보이면 승인 된 각도 (파란색)가 있습니다. 그런 다음 다각형은 기울기 (녹색)의 선에 대해 단조롭습니다 .δ1/tanδ

소행성

이제 알고리즘입니다.

하자 될 다각형의 정점 번째. 먼저 모서리 의 절대 각도 와 꼭짓점 의 내부 각도 를 계산하십시오 . 모든 우수한 프로그래밍 언어로 제공 되는 기능을 사용하십시오 .vi=(xi,yi)iαi(vivi+1)βiviatan2

αi=atan2(yi+1yi,xi+1xi)
βi=αi+1αi+{0 if αi+1αi2π if αi+1<αi

정점이 반 시계 방향이 아닌 경우, 즉 가 음수가 아닌 경우 정점의 순서를 . ( : 시계 반대 방향, : 시계 방향).s=iβinπs=2πs=2π

다음은 보다 큰 내부 각도 , 에만 해당됩니다 . 내 사진의 빨간 것들. 목표는 모듈로 없는 각도 를 찾는 것입니다 . 즉, 모든 대해 :mπβj>πδj[αj+1,αj]πjβj>π

(δ<αj+1αj<δ) if αj+1<αj
(αj<δ<αj+1) if αj<αj+1

여기서 는 에서 정규화 된 값입니다 . 두 번째 경우는 초과하는 간격에 해당합니다 (이번 는 "내부"여야 함).αjαj[0,π)πδ

이하지만 하나를 할 수있는 빠른 방법 아마이 값을 정렬 할 수 있습니다 로 및 테스트하는 .O(n2)αj mod πγ1,γmδ{γ12,γ1+γ22,,γm1+γm2,γm+π2}

를 찾으면 이 존재하고 기울기 입니다. 그렇지 않으면 는 단조롭지 않습니다.δL1/tanδP


그 그림을 만들기 위해 어떤 소프트웨어를 사용하셨습니까?
jojman

@jojman 기억 나지 않지만 김프 였어야했는데 그때 사용했던 다른 프로그램은 기억 나지 않습니다.
jmad
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.