มันเป็นไปได้.
พิจารณารูปหลายเหลี่ยมของคุณและพิจารณาจุดยอด "เว้า" จะกำหนดว่าเส้นใดจะตัดกันรูปหลายเหลี่ยมมากกว่าสองครั้ง ในรูปต่อไปนี้ฉันทำเครื่องหมายช่วงเวลา (สีแดง) ของมุมต้องห้าม หากคุณรวมมันเข้าด้วยกันและเห็นรูในดิสก์สีแดงแสดงว่ามีมุมที่ได้รับอนุญาต (เป็นสีน้ำเงิน) รูปหลายเหลี่ยมนั้นซ้ำซากกับความชันของเส้นใด ๆ- 1 / tan δ (เป็นสีเขียว)δ−1/tanδ
ตอนนี้อัลกอริทึม
ให้เป็นiจุดยอดของรูปหลายเหลี่ยม แรกคำนวณมุมแน่นอนαฉันของขอบ( วีฉันโวฉัน+ 1 )และมุมภายในβฉันของจุดสุดยอดวีฉัน ใช้ฟังก์ชั่นที่มีในภาษาการเขียนโปรแกรมที่ดีทั้งหมดvi=(xi,yi)iαi(vivi+1)βiviatan2
βฉัน = α ฉัน+ 1 - αฉัน + { 0 ถ้า α ฉัน+ 1 ≥ αฉัน 2 π ถ้า α ฉัน+ 1 < α i
αi=atan2(yi+1−yi,xi+1−xi)
βi=αi+1−αi+{02π if αi+1≥αi if αi+1<αi
ย้อนกลับลำดับของจุดยอดถ้าพวกเขาไม่อยู่ในลำดับทวนเข็มนาฬิกาเช่นถ้าไม่ได้เป็นลบ ( s = - 2 π : ทวนเข็มนาฬิกา, s = 2 π : ตามเข็มนาฬิกา)s=∑iβi−nπs=−2πs=2π
mπβj> πδ∪J[ αj + 1, αJ]πJβJ> π
( α J < δ < α J + 1 ) ถ้า α J < α J + 1
( δ < αj + 1∨ อัลฟ่าJ< δ ) ถ้า αj + 1< αJ
( αJ< δ < αj + 1) ถ้า αJ< αj + 1
αJαJ[ 0 , π )πδ
O ( n2)αJ mod πγ1, … γม.δ∈{γ12,γ1+γ22,…,γm−1+γm2,γm+π2}.
If you have find some δ then L exists and is of slope −1/tanδ. Otherwise P is not monotonous.