Meskipun pertanyaan Anda tidak mengatakannya, saya berasumsi bahwa Anda tidak ingin windows tumpang tindih.
Salah satu pendekatan untuk masalah ini adalah dengan menggunakan pemecah kendala seperti Choco . Seseorang cukup menuliskan batasan-batasan yang menyandikan masalah Anda, menyetel pemecah untuk bertindak dengan cara yang cerdas, dan kemudian membiarkannya berjalan. Ini berarti bahwa semua pemikiran yang perlu Anda lakukan akan dihabiskan untuk menemukan cara pengkodean masalah yang baik, bukan merancang algoritma dan melakukan pemrograman dan penyetelan. Ini jawaban parsial untuk membantu Anda memulai.
Asumsikan bahwa ukuran layar adalah .xmax×ymax
Untuk setiap jendela, , Anda akan memiliki satu set variabel dan kendalax i , y i , h i , w iWixi,yi,hi,wi
- xi,yi,hi,wi≥0
- xi+wi≤xmax
- yi+hi≤ymax
- Mungkin juga beberapa kendala pada ukuran minimal windows, mis. dan sebagainya.hi≥100
- Batasan aspek: Jika rasio aspek adalah 3: 4, batasannya bisa kira-kira seperti , di mana ϵ adalah beberapa istilah kesalahan kecil yang tidak nol untuk memungkinkan jendela yang tidak sempurna ukuran, karena kalau tidak Anda akan lebih kendala masalah.4hi−ϵ≤3wi≤4hi+ϵϵ
Sekarang Anda perlu merawat tumpang tindih jendela. Untuk setiap pasangan windows, , di mana i ≠ j , Anda akan menghasilkan kendala seperti berikut ini, yang menangkap bahwa tidak ada sudut W j muncul dalam W i . Untuk ( x , y ) ∈ { ( x j , y j ) , ( x j + w j , y j ) , ( x j , yWi,Wji≠jWjWi , menghasilkan kendala:(x,y)∈{(xj,yj),(xj+wj,yj),(xj,yj+hj),(xj+wj,yj+hj)}
- .¬(xi≤x≤xi+wj∧yi≤y≤yi+hj)
Kendala yang ditentukan sejauh ini hanya menggambarkan jendela non-tumpang tindih yang tidak tumpah di sisi layar, yang memenuhi beberapa batasan ukuran minimal, dan yang mempertahankan rasio aspek mereka.
Untuk mendapatkan kecocokan yang baik, Anda perlu menentukan metrik yang menangkap artinya menjadi tata letak yang baik. Satu kemungkinan adalah menganggap bahwa Anda ingin menjaga ukuran jendela kira-kira sama dan / atau bahwa Anda ingin meminimalkan "ruang putih". Saya tidak berpikir bahwa ini dapat dispesifikasikan menggunakan Choco, tetapi dimungkinkan dengan pemecahan kendala lainnya (orang lain mungkin dapat membantu di sini).
Choco memang memungkinkan seseorang untuk memaksimalkan wrt ke fungsi objektif yang ditentukan sebagai variabel tunggal. Berdasarkan ide ini, Anda dapat memaksimalkan hal berikut:
cost=∑i(hi+wi)cost