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


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+1−yi,xi+1−xi)
βi=αi+1−αi+{0 if αi+1≥αi2π if αi+1<αi

정점이 반 시계 방향이 아닌 경우, 즉 가 음수가 아닌 경우 정점의 순서를 . ( : 시계 반대 방향, : 시계 방향).s=∑iβi−nπ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,…,γm−1+γm2,γm+π2}

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


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

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