Bir çokgenin keyfi bir çizgiye göre monoton olup olmadığını nasıl test edebilirim?


16

Tanım : bir çokgen P düzlemindeki bir düz çizgi ile ilgili olarak monoton olarak adlandırılır L ise ortogonal her satır, L kesiştiği P en fazla iki kez.

Bir çokgen verilen P , herhangi bir çizgi olup olmadığını belirlemek mümkündür L , örneğin çokgen bu P ile ilgili olarak bir monoton L ? Evet ise, nasıl?

Daha önce, ben bir sorulan ilgili soru (Bir çokgen belirli doğruya göre monoton olup olmadığını belirlemek için nasıl istedi), ancak şimdi ben durumda ilgilenen am L edilir değil verilen veya peşin belirtilmiş.


Neden sadece döndür değil / öyle ki koordinat sistemi kayması olur x -Axis ve sonra yeniden eski algoritma çalıştırmak? Ek çalışma O ( 1 ) ' de yönetilebilir olmalıdır . LxO(1)
HdM

4
@HdM: Satır L, girişin bir parçası olarak verilmez.
Tsuyoshi Ito

Yanıtlar:


16

Bu mümkün.

Çokgen düşünün ve "içbükey" köşeleri düşünün. Tam olarak hangi çizgilerin çokgeni iki kereden fazla keseceğini tanımlarlar. Aşağıdaki şekilde, yasak açıların aralıklarını (kırmızı olarak) işaretledim. Bunları bir araya getirir ve kırmızı diskte bir delik görürseniz, yetkili açılar (mavi renkte) vardır. Poligon daha sonra herhangi bir eğim çizgisine göre monoton olur - 1 / tan δ (yeşil).δ1/tanδ

Asteroids

Şimdi algoritma.

Let olduğu I çokgen inci tepe. İlk olarak, mutlak açısını hesaplamak α i kenarının ( v ı v i + 1 ) ve iç açı β i tepe noktası v ı . Tüm iyi programlama dillerinde mevcut işlevi kullanın .vi=(xi,yi)iαi(vivi+1)βiviatan2

β i = α i + 1 - α i + { 0  ise  α i + 1α i 2 π  ise  α i + 1 < α i

α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}

δ sonraL var ve eğimli -1/taba rengiδ. Aksi takdirdeP monoton değildir.


Bu çizimi yapmak için hangi yazılımı kullandınız?
jojman

@jojman Hatırlamıyorum ama GIMP olmalıydı, o zamanlar kullanacağım başka bir programı hatırlayamıyorum.
jmad
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.