Itu mungkin.
Pertimbangkan Anda poligon dan pertimbangkan simpul "cekung". Mereka menentukan dengan tepat garis mana yang akan memotong poligon lebih dari dua kali. Pada gambar berikut ini saya menandai interval (merah) dari sudut terlarang. Jika Anda menempatkan mereka bersama-sama dan melihat lubang di disk merah, maka ada sudut resmi (berwarna biru). Poligon tersebut kemudian monoton sehubungan dengan garis kemiringan (berwarna hijau).δ−1/tanδ
Sekarang algoritma.
Biarkan menjadi simpul ke- dari poligon. Pertama hitung sudut absolut tepi dan sudut dalam dari simpul . Gunakan fungsi yang tersedia dalam semua bahasa pemrograman yang baik.vi=(xi,yi)iαi(vivi+1)βiviatan2
αi=atan2(yi+1−yi,xi+1−xi)
βi=αi+1−αi+{02π if αi+1≥αi if αi+1<αi
Balikkan urutan simpul jika tidak dalam urutan berlawanan arah jarum jam, yaitu jika tidak negatif. ( : berlawanan arah jarum jam, : searah jarum jam).s=∑iβi−nπs=−2πs=2π
Berikut ini hanya untuk sudut dalam yang lebih besar dari yaitu, . Yang merah di foto saya. Tujuannya adalah untuk menemukan sudut yang tidak ada dalam modulo . Yaitu sedemikian sehingga untuk semua sedemikian rupa sehingga :mπβj>πδ∪j[αj+1,αj]πjβj>π
( δ < αj + 1∨ αj< δ ) jika αj + 1< αj
( αj< δ < αj + 1) jika αj< αj + 1
di mana sini nilai normal di . Kasus kedua sesuai dengan interval yang melampaui (jadi kali ini harus "di dalam").αjαj[ 0 , π )πδ
Mungkin ada cara yang lebih cepat untuk melakukan ini tetapi satu di adalah mengurutkan nilai ke dan untuk menguji .O ( n2)αj mod πγ1, ... γmδ ∈{ γ12, γ1+ γ22, ... , γm - 1+ γm2, γm+ π2}
Jika Anda telah menemukan beberapa maka ada dan dengan kemiringan . Jika tidak tidak monoton.δL.- 1 / tanδP