Dışbükey çokgen içinde maksimum alan dikdörtgen nasıl bulunur?


21

Bu yazıda bir dışbükey çokgen içinde maksimum alan-dikdörtgenin nasıl bulunacağına dair algoritmalar / fikirler arıyoruz .

Aşağıdaki şekilde, sayılar takılı dikdörtgenlerin alanlarıdır. Gösterildiği gibi, istenen bir dikdörtgen her boyutta değişebilir ve herhangi bir açıda olabilir.

Düzenle:

Burada sorduğumuz şekilde bahsedilen problemle nasıl başa çıkılacağı konusunda net bir fikrimiz yok. Bununla birlikte, maksimum alan-dikdörtgenin çokgenin bir kenarına hizalanmış (elbette aynı uzunluktaki kenar değil) bir kenarı olanlardan biri olabileceğini tahmin ediyoruz .

görüntü tanımını buraya girin


1
Hangi yazılımı kullandığınızı belirtebilir misiniz? Ayrıca, çalışmanızı bu ana kadar yayınlayın ya da bunu çözmek için çalıştığınız genel yaklaşımı. Belki biri daha önce yaptıklarını geliştirebilir. Tecrübelerime göre, "maviden" bir soru göndermekten çok daha faydalı cevaplar elde edeceğim.
Martin


@Martin Yazılım: Eğer gerekliyse , Pythono zaman programlama yapılır Fortran. Bizim önceki yazı dayalı bir tahminim var burada da yukarıda belirtilen whuberbu bir cevap olurdu çokgenle ortak bir kenara sahip bir dikdörtgen olabilir.
Geliştirici

1
Senin sorunun gerçekten ilginç bir konu ve sanırım burada ve burada bir çözme algoritması bulmayı başardım .
nickly

1
@ nickves Bağlantılar için teşekkürler. Lütfen bu bilgileri algoritmaların küçük bir açıklaması ile cevap olarak verir misiniz? Kabul edilmek için potansiyel olarak iyi bir cevap olacaktır.
Geliştirici

Yanıtlar:


4

Bazı notlar yorum yapmak için çok büyük (ancak bu bariz bir algoritma önermiyor olsa da):

Delme çizgisi (EDİTT) : Maksimum alan dikdörtgenin en az iki köşesi, çokgenin sınırında (yani bir kenar boyunca veya bir tepe noktasında) bulunmalıdır. Ve eğer maksimum alan dikdörtgeni bir kare değilse, poligonun sınırında en az üç köşe olmalıdır.

Bunu dört adımda kendime kanıtladım:

Not # 1 : Maksimum alan dikdörtgenin en az bir tepe noktası daima çokgenin sınırında olacaktır. Bu oldukça açık, ancak bir kanıt böyle devam edebilir (çelişkiyle): Poligonun sınırında tepe noktası olmayan bir "maksimum" dikdörtgene sahip olduğunuzu varsayalım. Bu, her köşesinde en az küçük bir oda olacağı anlamına gelir. Böylece dikdörtgeni biraz genişleterek, maksimumluğuyla çelişebiliyordunuz.

Not # 2 : Maksimum alan dikdörtgenin en az iki köşesi daima çokgen sınırında yer alır. Bir kanıt bu şekilde olabilir (yine çelişkiyle): Sınırda yalnızca bir tepe noktası olan bir "maksimum" dikdörtgene sahip olduğunuzu varsayalım (Not # 1 ile garanti edilir). Bu köşeye bitişik olmayan iki kenarı dikkate alın. Bitiş noktaları sınırda olmadığından, her birinde küçük bir yer var. Bu yüzden, bu kenarlardan herhangi biri biraz "ekstrüde edilebilir", çokgen alanını genişletir ve maksimumluğuyla çelişir.

Not # 3 : Çokgen sınırında kalan maksimum alan dikdörtgeninin çapraz olarak iki karşıt köşesi vardır. (Not 2'den en az iki tane olduğunu biliyoruz, ancak birbirlerinin karşısında olmaları şart değil.) Ama yine de çelişkiyle, eğer sadece iki sınır köşesi bitişikse, o zaman zıt kenardan (her ikisi de köşeleri değil) sınırda) biraz ekstrüzyona tabi tutulabilir, dikdörtgenin alanını artırabilir ve maksimumluğuyla çelişebilir.

Not # 4 : (EDİTDİR) Eğer maksimum alan dikdörtgeni bir kare değilse, köşelerinin üçü çokgenin sınırında kalır.

Kanıtlamak için, durumun bu olmadığını, yani maksimum alan dikdörtgeninin bir kare olmadığını, ancak köşelerinin sadece ikisinin çokgenin sınırında olduğunu ispatlamak için. Maksimumliği çelişen, daha büyük bir dikdörtgenin nasıl oluşturulacağını göstereceğim.

Dikdörtgenin köşelerini Çağrı A, B, C, ve D. Genellik kaybı olmadan , poligon sınırında olanın Bve Dbunların olduğunu kabul edin . Yana Ave Cpoligonun iç kısmında bulunan, (etrafında çevrelerle temsil çevrelerindeki bazı kıpırdatmak oda var Ave Caşağıda resim olarak). Şimdi dikdörtgenin etrafına bir daire çizin, ve yeni bir dikdörtgen oluşturacak şekilde, noktaları Ave Cdairenin çevresini aynı miktarda ( aşağıda yapmak A've C'resimde gösterildiği gibi) kaydırınA'BC'Dorijinal dikdörtgenden daha karedir. Bu işlem aynı zamanda orijinal poligon içinde bulunan ve daha geniş bir alana sahip yeni bir dikdörtgen oluşturur. Bu bir çelişkidir, bu yüzden kanıt yapılır.

Yeni bir dikdörtgen inşa etmek

Bu kanıta inanmak için, kendinizi bir daireye yerleştirilmiş bir dikdörtgenin alanının "daha kare" olduğunda artacağı konusunda ikna etmeniz gerekir (yani, kenar uzunlukları arasındaki fark küçülür). Ayrıca poligonun dışbükey olması gerekir, böylece yeni çizgilerin hepsi de içinde olur. Ve halının altına süpürülen başka küçük detaylar da var, ama hepsinin işe yaradığından eminim.


Not # 4 balıktır, çünkü "iki kıpırdamak" diğer iki köşe dikdörtgen olmayanları yaratacaktır.
whuber

Doğru. Bununla birlikte, dördüncü örneğin görselleştirilmesi tam olarak doğru değildir (poligon sınırında 2 köşe varsa, daha fazla uzatamazsınız). Gerçi nasıl açıklayacağımı tam olarak bulamıyorum (yorum yazmayı denedim ama çok dağınık oldu), ama haklısınız.
Saryk

4. nota dikkat edilmesi gereken bazı örnekler olduğuna inanıyorum. Bulduğumu olanlar göstermek için bazı hesaplamalara dayanıyor; en basit olanı, düzensiz altıgen bir sapmadır (iki zıt köşesi hafif kesilmiş bir kare).
whuber

Not 4'ün balık olduğunu kabul etti. Bu akşam daha yakından bakacağım ve düzelteceğim ya da kaldıracağım.
csd

+1 Zorluğun güzel bir çözümü. Düzenleme için teşekkürler!
whuber

3

Söz konusu yeşil notunuzla ilgili çok hızlı ve çirkin bir çizim yaptım. Yorum olarak gönderemedim, bu yüzden cevap olmasa da cevap yazmam gerekiyordu.
Aşağıdaki resimde maksimum bir alan dikdörtgenine sahip olduğumuza inanıyorum (mükemmel değil, sadece bir fikir vermek için Boya üzerine yapılmış bir eskizdir), siyah plygonun sınırları ...
Ancak yanılıyor olabilirim, bu durumda tüm özrümü aldınız .
Paint'te yaptığım Quick Sketch


3
İyi nokta (+1). Yine de çok daha basit bir karşı örnek var: normal bir sekizgen içine maksimum alanlı bir dikdörtgen yazma problemini düşünün. Solüsyonun köşelerinin, sekizgenin alternatif köşeleriyle çakıştığını ve bu çözeltinin kenar hizalanmış herhangi bir dikdörtgenden büyük ölçüde daha büyük olduğunu görmek kolaydır (ve ilk önce sekizgen çemberinin içinde maksimum bir kare bularak) kanıtlamak kolaydır.
whuber

Aslında (şu an büyük bir şüphem var ), bu çokgenin dış küçük dikdörtgeni ( bu yazıdakiler ) aynı yönden sahip değildi, öyle değil mi? (Kırmızı dikdörtgemle aynı yönelimi
görürdüm

3
Bu çokgen, dışbükey değil bu arada. Orijinal soru dışbükey çokgenler ile sınırlıdır.
csd

2
@csd Bu harika bir nokta, ancak karşı örneklemimin gösterdiği gibi Saryk hala doğru. Saryk, minimum alan sınırlama dikdörtgeni ile ilgili bir sorun yoktur: dışbükey gövdenin bir tarafını içermesi gerektiğini kanıtlamak kolaydır (titizlikle). Maksimum alan yazıtlı dikdörtgenin (dışbükey bir çokgenin) yalnızca sınıra temas eden iki köşesi olması gerektiğine inanıyorum.
whuber

2

Diğer algoritmaların çoğu, dışbükey bir çokgenin içine yazılan ve düzlemsel bir karmaşıklığa sahip olan maksimum alanlı doğrusal dikdörtgeni bulur O(log n). Maksimum alan çokgeninin kenarlardan biriyle hizalandığını tahmin etmiyorsunuz, çünkü yapmanız gereken tek şey poligon nzamanlarını döndürmek , bunun karmaşıklığına neden O(n log n)olmak ve kısa araştırmamda yapamam. Bunun kolay olduğunu söyleyen bir şey bul.

Bununla birlikte, Knauer vd tarafından Dışbükey Çokgenlerde En Büyük Yazılı Dikdörtgenler kağıdı . al., sizi doğru cevaba yaklaştıracak bir yaklaşım algoritmasını açıklar.

Algoritmayı anladığım kadarıyla, bilinen eksen hizalanmış maksimum alan çokgenlerinden birinin üstüne inşa eder ve daha sonra rastgele polyon boşluğu içindeki noktaları örnekler, bu rastgele örneklerden çoklu eksen oluşturur, bu eksen üzerinde yinelenir ve ekseni uygular Her birine bir algoritma atanmış algoritma ve ardından bu kümedeki en büyük dikdörtgeni döndürür.


İlk cümlede belki bir yazım hatası var mı? Muhtemelen bir O (log (n)) algoritması olamaz çünkü sadece koordinatlarda okumak bir O (n) işlemidir!
whuber

Bağlantı öldü
dangerousdave

1
@dangerousdave - Ne kadar sürerse alternatif bir bağlantı
buldum
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.