Bir içbükey çokgeni minimum sayıda dikdörtgenle örtün


11

Minimum dikdörtgenler ile basit bir içbükey çokgen kapsayacak çalışıyorum. Dikdörtgenlerim herhangi bir uzunlukta olabilir, ancak maksimum genişliklere sahiptir ve çokgenin asla keskin bir açısı olmayacaktır.

İçbükey poligonumu, her bir üçgeni minimal olarak sınırlayan ve daha sonra bu dikdörtgenleri daha büyük olanlarla birleştiren minimum örtüşen dikdörtgenler kümesi oluşturan üçgenlere ayırmaya çalışmayı düşündüm. Ancak, bunun çokgenin kenarlarındaki küçük çentikler için işe yarayacağını sanmıyorum. Bu çentiklerde refleks köşeleri tarafından oluşturulan üçgenler yanlış dikdörtgenler oluşturur. Çentikleri açıklayan / yok sayan dikdörtgenler arıyorum.

Hesaplamalı geometri hakkında hiçbir şey bilmiyorum, bu yüzden soruyu nasıl sormaya başlayacağımdan gerçekten emin değilim.

Benzer olan diğer yayınları buldum, ancak ihtiyacım olan şey değil:

Bazı örnekler: Girdi siyah. Kırmızı, kabul edilebilir çıktıdır.

resim açıklamasını buraya girin

Başka bir örnek: İkinci çıktı tercih edilir. Bununla birlikte, her iki çıktıyı üretmek ve tercihi belirlemek için başka bir faktör kullanmak muhtemelen bu algoritmanın sorumluluğunda değildir.

resim açıklamasını buraya girin

resim açıklamasını buraya girin

Eğrileri taklit eden çokgenler oldukça nadirdir. Bu senaryoda, dikdörtgen alanlarının çoğu boşa gider. Bununla birlikte, bu kabul edilebilir çünkü her dikdörtgen maksimum genişlik sınırlamasına uyar.

resim açıklamasını buraya girin

Ayrıca, bu makaleyi ihtiyacım olanlara yakın buldum:

Belki daha iyi bir soru "Bir içbükey çokgenin dikdörtgen benzeri kısımlarını nasıl belirleyebilirim?" resim açıklamasını buraya girin

İşte istenen uygulamayı gösteren bir resim: resim açıklamasını buraya girin

Yeşil, gerçek malzeme kullanımıdır. Kırmızı dikdörtgenler düzenlerdir. Mavi, tüm çokgenin MBR'sidir. Küçük MBR'leri alıp doldurmaya çalışmam gerektiğini düşünüyorum. Sol üst köşede çokgenin ortasına doğru giden 2-3 yeşil dikdörtgen pahalı. Bunu en aza indirmek istiyorum. Yeşil dikdörtgenler minimum ve maksimum genişlik ve yüksekliğe sahiptir, ancak bir bölgeyi kapsayacak kadar çok satır ve sütun kullanabilirim. Yine, girdiye yayılmayan dikdörtgen sayısını en aza indirmeliyim. Yeşil dikdörtgenin şeklini de çok pahalı olan küçük yerlere uyacak şekilde değiştirebilirim. Başka bir deyişle, mümkün olduğunca çok sayıda dikdörtgen elde etmek idealdir.


3
Başlığınız dışbükey çokgenler diyor, ancak soru içbükey çokgenlerden bahsediyor. Belki bazı düzeltmeler yapmanız gerekir?
Ankur

1
@JukkaSuomela, ilk iki resimde, çokgen kabaca aynı boyutta ve ilk resimde, ikincide yaptığım gibi dikey olarak üç dikdörtgen çalıştırabilirdim. Bununla birlikte, bu daha az arzu edilir. Bence hüner dikdörtgenlerin çevresi ile ilgili. Belki de yapmaya çalıştığım şey, çokgenin içindeki dikdörtgen sınırını en aza indirmek ve çokgenin kenarlarıyla eşdeğer olan sınır miktarını en üst düzeye çıkarmaktır. Bununla birlikte, bazen dikdörtgenler tamamen kaplamak için çokgenden dökülmelidir.
Josh

1
@JohnMoeller, anlıyorum. Bu, bir insanın çözümü kolayca tanımlayabildiği ancak sorunun doğru bir şekilde ifade edilmesinin oldukça zordur. Sorun halı veya duvar kağıdı döşemeye benzer ve asıl sorun yapısal / mimari bir sorundur. Daha sonra başka bir tesselasyon formu ile doldurulacak dikdörtgen düzenlerin bölgelerini belirlemeye çalışıyorum. Bu dikdörtgenleri bulmak ve dikdörtgen olmayan bölgeleri ele almak problemdir. Daha fazla açıklayabilirsem bana bildirin.
Josh C.

2
Bence bu ilk önce bir modelleme sorusu olarak yaklaşmalıyız: amaç, iyi tanımlanmış bir optimizasyon problemini çözen bir algoritma bulmak değil, amaç optimizasyon problemini tanımlamaktır.
Jukka Suomela

3
@JoshC .: Belki de bize gerçek dünya uygulaması hakkında daha fazla bilgi vermeye çalışırsanız yararlı olabilir. Açıklamanızdan, örneğin, kesmenin oldukça pahalı olduğunu düşünüyorum - ideal olarak, dikdörtgen parçalar mümkün olduğunca az kesme gerektirecektir. Bu doğru mu?
Jukka Suomela

Yanıtlar:


3

Bu geometrik set kapağının bir çeşididir. Kesin ayarlara bağlı olarak, iyi bir yaklaşım yapabilirsiniz. Sorun elbette NP-Hard. Doğal hersersitikler, açgözlü algoritma kullanmaktır (her zaman henüz kapsanmayan en çok alanı kapsayan dikdörtgeni / şeridi seçin. Alternatif teknik, yeniden tartmayı kullanmaktır. Denemek isteyebileceğiniz ilginç bir hueristik, ilk önce çokgeninizi minimum sayıda dışbükey şekle (Keil dinamik programlama algoritması kullanarak) ayrıştırmak ve daha sonra her dışbükey çokgeni ayrı ayrı kaplamaktır ...


Keil Dinamik Programlama algoritmasına aşina değilim. Ancak, sezgisel tarama dayalı bazı varyantları ile En Büyük Yazılı Dikdörtgen ve Minimum Sınırlayıcı Dikdörtgen algoritmaları bir arada kullanarak bir yöntem buldum.
Josh C.

2

Bence bu yazı biraz yardımcı olabilir. Açıkçası aynı sorun değil - aslında ters problem, çokgenlerle bir dikdörtgeni kaplamak - ancak bazı fikirler bir başlangıç ​​noktası olabilir. Özellikle, bu ters sorun NP-zor ve seninki de olabilir sanıyorum (azaltma açık bir uzantısı olmasa da).

Arkin, A. Efrat, G. Hart, I. Kostitsyna, A. Kroller, J. Mitchell ve V. Polishchuk. Kek üzerine İskandinav Thins: En Küçük Tek Boyutlu-All Box. Algoritmalar ile eğlenceli . pg.16-27. 2012


1
Öneriniz için teşekkür ederiz. Bu soruna daha fazla açıklık getirmek için şirketimdeki mühendislik ve üretim bölümleriyle çalışıyorum. Hala onaylamak için bekliyorum, ama şimdi en büyük yazılı dikdörtgen setlerini döndürecek bir algoritmanın işe yarayacağını düşünüyorum. Şekli tamamen kapsamasa da, ortogonal olmayan bölgeleri bazı sezgisel yöntemlere bırakırken ortognal bölgeleri tercih eder. Tek püf noktası bu dik bölgeleri maksimuma çıkarmak. Son görüntümü 9 lamda benzeri figürle görün.
Josh
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.