Rastgele çizgilerle dolu bir bölge (2B) düşünün (aşağıdaki Şekil). Dört sınır kenarı içeren çizgiler arasındaki boş alanları bir şekilde doldurmakla ilgileniyoruz:
0- parsel büyüklüğünün maksimize edilmesi;
1- doldurma parsellerinin şekli yatay veya dikey olarak kare şeklindedir;
2 - doldurma parsellerinin şekli karedir, yani gevşetilmiş hizalama ;
3- Dolum parsellerinin şekli herhangi bir dörtgendir. asıl sorumuz
Şimdilik üç farklı senaryo var. Satırların ayarlanmış, gerçek sayılardan oluştuğunu
unutmayın .[x1,y1,x2,y2]
[* * *] Olası çözümler / algoritmalar / kod parçacıkları / vb. Fikirleri memnuniyetle karşılar.
Güncelleme 1: İlk durum için bir çözümü yönetebiliriz:
Adımlar:
1- satırlar
2- satırları bir bitmap halinde rasterleştirir
3 - yakındaki hücreleri istenen rengin her hücresi için (yani aynı renk) en üst düzeye çıkarmak için objektif bir fonksiyonla ararlar. Alan yani hücre sayısı.
İyi çalışıyor ancak sadece ilk senaryoyu kapsıyor ve aynı zamanda yavaş.
Güncelleme 2:
Okuyucunun boşluk doldurma-döşeme kavramına aşina olduğunu varsaydık. İlham almak için linki takip edebilirsiniz. Ancak sorunumuzun farklı olduğuna dikkat edin. Boş alanı rastgele doldurmadığımız ve boyutu rastgele seçmediğimiz için. Çözüm yinelemeli olmalıdır. Tüm durumlar için, takılan parsel sayısında bir sınır yoktur. Aslında, örneğin parseller için minimum bir alan seçerek yineleme sayısını sınırlamak kullanıcıya kalmıştır. Bu, yukarıda verilen örnekte, çizgileri belirtilen boyutta piksellere ayrıştırdığımız açıktır. Diğer bir deyişle, prosedür, örneğin parsellerin azami alanı gibi kriterlere göre boş alan tamamen doldurulana kadar devam etmelidir.
Güncelleme 3:
özet:
Bir uygulama, ağır kırılmış bir “madende” çıkarılabilir sağlam 'kaya' blokların dağılımını bulmaktır. Bu, delme tasarımı, finansal değerlendirme vb. Dahil olmak üzere birçok yönden çok yararlı olabilir.
Açıklama:
Dekoratif kaya madeni (taş), dikdörtgen küpler şeklinde kesilmiş, sağlam kaya blokları olan ürünler, fiyatın büyüklüğüne bağlıdır blok. Bir bloğun uygun bir alandan çıkarılması, yani eğer kalan parçaların miktarı mümkün olduğu kadar küçükse, büyük bir kırılmaya gerek duyulmayacaktır. Genellikle, küçük kaya parçaları nispeten ekonomik bir değere sahip değildir ve atık olarak kabul edilir.
Bu yazıda soru bu tür bir sorunun çözümlerini araştırıyor.
Problem için matematiksel bir görünüm şöyle ifade edilebilir:
2D: Belirli bir 2D bölgeden çıkarılabilen tüm dikdörtgenleri, mümkün olduğunca daha büyük dikdörtgen boyutu için optimize edilmiş bazı çizgilerle bulun.
3B: Belirli bir 3B bölgeden çıkarılabilen tüm dikdörtgen küpleri, bazı alt düzlemlerle (daha iyi: çokgenler) mümkün olduğunca daha büyük blok boyutu için optimize edilmiş olarak bulun.
Bu devam eden bir araştırmanın parçası olduğundan, aşağıdaki yorumlarda sorulan bazı soruların sağlayabileceğimiz kesin cevapları yoktur. Burada verilen bilgilerin, sorunun genel resmini elde etmek için gerçekten yeterli olduğuna inanıyoruz. Bununla birlikte, toplum yararları için elimizden gelen bazı detayları sağlarız.
Nihai sorunun çözümünde bazı kısıtlamalar getirebilirsiniz, ancak daha sonra eklemenin her zaman mümkün olduğunu düşünüyoruz. Örneğin, aşağıdakileri takip edin:
Yukarıda belirtilen koşullar altında çıkarılacak olan {2D case} Bir bloğun en iyi boyutu (ekonomik olarak en uygun dikdörtgen) , örnekteki bölge için 1x1 m
verilmiştir 10x10 m
. Bu, ekonomik değere dayalı olarak tanımlanan bir kısıtlamadır. Kesme vb için minimum uygulanabilir boyut0.15x0.15 m
; yani bu ikinci boyut sınırı.
Yukarıdaki şekil blok büyüklüğüne bağlı olarak ekonomik değer fonksiyonunu göstermektedir. Yani bu özel durum için her kaya parçası 0.15x0.15 m
sadece atıktan daha küçüktür . 1.7x1.7 m
Çalışma sınırlarından daha büyük blok büyüklüğü olmayacaktır .