Sorunuz bunu söylemese de, pencerelerin çakışmasını istemediğinizi varsayıyorum.
Bu soruna bir yaklaşım Choco gibi bir kısıtlama çözücüsü kullanmaktır . Biri, probleminizi kodlayan kısıtlamaları yazar, çözücüyü akıllı bir şekilde harekete geçirir ve sonra çalışmasına izin verir. Bu, yapmanız gereken tüm düşüncenin, problemi kodlamanın iyi bir yolunu bulmak için harcanacağı anlamına gelir, bir algoritma tasarlamak ve programlama ve ayarlama yapmak değil. İşte başlamanız için kısmi bir cevap.
Ekran boyutunun .xmax×ymax
Her pencere için, , bir dizi değişkeniniz olacak ve kısıtlamalarx i , y i , h i , w iWixi,yi,hi,wi
- xi,yi,hi,wi≥0
- xi+wi≤xmax
- yi+hi≤ymax
- Belki de pencerelerin minimum boyutuyla ilgili bazı kısıtlamalar, örneğin, vb.hben≥ 100
- En boy oranı kısıtlamaları: En boy oranı 3: 4 ise, kısıtlama gibi bir şey olabilir , burada ϵ mükemmel olmayan pencereye izin vermek için sıfır olmayan bir hata terimidir boyutları, aksi takdirde sorunu aşırı kısıtlarsınız.4 sben- s ≤ 3 ağırlıkben≤ 4 saatben+ ϵε
Şimdi pencere örtüşmesine dikkat etmeniz gerekiyor. Pencerelerin Her çift için , i ≠ j , aşağıdakilerden gibi kısıtlamaları, elde edersiniz hangi yakalama Bundan hiç köşe W j içinde göründüğünü W i . İçin ( x , y ) ∈ { ( x j , Y j ) , ( x j + w j , Y j ) , ( x j , YWben, Wjben ≠ jWjWben , kısıt oluştur:( x , y) ∈ { ( xj, yj) , ( xj+ wj, yj) , ( xj, yj+ sj) , ( xj+ wj, yj+ sj) }
- .¬ ( xben≤ x ≤ xben+ wj∧ yben≤ y≤ yben+ sj)
Şimdiye kadar belirtilen kısıtlamalar, yalnızca ekranın kenarlarına dökülmeyen, bazı minimum boyut kısıtlamalarını karşılayan ve en boy oranını koruyan örtüşmeyen pencereleri açıklar.
İyi bir uyum sağlamak için, iyi bir düzen olmanın ne anlama geldiğini yakalayan bir metrik belirtmeniz gerekir. Bir olasılık, pencerelerin kabaca eşit boyutta olmasını ve / veya "beyaz alanı" en aza indirmek istediğinizi varsaymaktır. Bunun Choco kullanılarak belirtilebileceğini düşünmüyorum, ancak başka bir kısıtlama çözümü ile mümkün olabilir (başka biri burada yardımcı olabilir).
Choco, tek bir değişken olarak belirtilen bir nesnel fonksiyona wrt değerini en üst düzeye çıkarmaya izin verir. Bu fikre dayanarak aşağıdakileri en üst düzeye çıkarabilirsiniz:
- Σben( sben+ wben)
bir kısıtlama yazarak en üst düzeye çıkarmak için Choco ve anlatan C o s t .c o s t = ∑ben( sben+ wben)c o s t