Tutupi Poligon Cekung dengan jumlah minimum persegi panjang


11

Saya mencoba untuk menutupi poligon cekung sederhana dengan persegi panjang minimum. Persegi panjang saya bisa panjang, tetapi memiliki lebar maksimum, dan poligon tidak akan pernah memiliki sudut yang akut.

Saya berpikir tentang mencoba menguraikan polong cekung saya menjadi segitiga yang menghasilkan satu set persegi panjang minimum yang tumpang tindih minimal mengikat setiap segitiga dan kemudian menggabungkan persegi panjang itu menjadi yang lebih besar. Namun, saya tidak berpikir ini akan bekerja untuk takik kecil di tepi poligon. Segitiga yang dibuat oleh simpul refleks pada takikan tersebut akan membuat persegi panjang yang salah. Saya mencari persegi panjang yang akan menjangkau / mengabaikan takikan.

Saya tidak benar-benar tahu apa-apa tentang geometri komputasi, jadi saya tidak begitu yakin tentang bagaimana mulai mengajukan pertanyaan.

Saya menemukan posting lain yang serupa, tetapi bukan yang saya butuhkan:

Beberapa contoh: Hitam adalah input. Merah adalah output yang bisa diterima.

masukkan deskripsi gambar di sini

Contoh lain: Output kedua lebih disukai. Namun, menghasilkan kedua output dan menggunakan faktor lain untuk menentukan preferensi mungkin diperlukan dan bukan tanggung jawab algoritma ini.

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Poligon yang menyerupai kurva sangat langka. Dalam skenario ini, sebagian besar area persegi panjang terbuang sia-sia. Namun, ini dapat diterima karena setiap persegi panjang mematuhi batasan lebar maks.

masukkan deskripsi gambar di sini

Juga, saya menemukan artikel ini dekat dengan apa yang saya butuhkan:

Mungkin pertanyaan yang lebih baik adalah "Bagaimana saya bisa mengidentifikasi bagian seperti poligon cekung berbentuk segi empat?" masukkan deskripsi gambar di sini

Berikut adalah gambar yang menunjukkan implementasi yang diinginkan: masukkan deskripsi gambar di sini

Hijau adalah penggunaan material yang sebenarnya. Kotak merah adalah tata letak. Biru adalah MBR dari seluruh poligon. Saya pikir saya harus mencoba untuk mendapatkan MBR kecil dan mengisinya. 2-3 persegi hijau di sudut kiri atas yang berakhir di tengah poligon mahal. Itulah yang ingin saya perkecil. Persegi hijau memiliki min dan max lebar dan tinggi, tapi saya bisa menggunakan banyak baris dan kolom yang diperlukan untuk menutupi suatu daerah. Sekali lagi, saya harus meminimalkan jumlah persegi panjang yang tidak menjangkau input. Saya juga bisa memodifikasi bentuk persegi panjang hijau agar pas di tempat-tempat kecil yang juga sangat mahal. Dengan kata lain, mendapatkan bujur sangkar sebanyak mungkin untuk menjangkau sebanyak mungkin adalah ideal.


3
Judul Anda mengatakan poligon cembung, tetapi pertanyaannya adalah poligon cekung. Mungkin Anda perlu melakukan koreksi?
Ankur

1
@JukkaSuomela, dalam dua gambar pertama, poligon berukuran hampir sama, dan pada gambar pertama, saya bisa menjalankan tiga persegi panjang secara vertikal seperti yang saya lakukan pada gambar kedua. Namun, ini kurang diinginkan. Saya pikir triknya berkaitan dengan batas-batas persegi panjang. Mungkin yang saya coba lakukan adalah meminimalkan jumlah batas persegi panjang yang ada di dalam poligon, dan memaksimalkan jumlah batas yang collinear dengan tepi poligon. Namun, terkadang persegi panjang harus keluar dari poligon untuk menutupnya sepenuhnya.
Josh C.

1
@ JohnMoeller, saya mengerti. Ini adalah masalah di mana manusia dapat mengidentifikasi solusinya dengan mudah tetapi menyatakan masalah dengan benar cukup sulit. Masalahnya mirip dengan meletakkan karpet atau kertas dinding dan masalah sebenarnya adalah struktural / arsitektur. Saya mencoba mengidentifikasi wilayah tata letak persegi panjang yang nantinya akan diisi dengan bentuk tesselation lain. Menemukan persegi panjang itu dan menangani daerah non-persegi panjang adalah masalahnya. Beri tahu saya jika saya bisa menjelaskan lebih lanjut.
Josh C.

2
Saya pikir kita harus mendekati ini terlebih dahulu sebagai pertanyaan pemodelan: tujuannya bukan untuk menghasilkan algoritma yang memecahkan masalah optimisasi yang terdefinisi dengan baik, tetapi tujuannya adalah untuk mendefinisikan masalah optimisasi.
Jukka Suomela

3
@JoshC .: Mungkin juga akan membantu jika Anda mencoba memberi tahu kami lebih banyak tentang aplikasi di dunia nyata. Saya mengumpulkan dari uraian Anda bahwa, misalnya, memotong cukup mahal - idealnya, potongan-potongan persegi panjang akan membutuhkan potongan sesedikit mungkin. Apakah ini benar?
Jukka Suomela

Jawaban:


3

Ini adalah varian dari penutup geometris. Bergantung pada pengaturan yang tepat, Anda mungkin dapat melakukan perkiraan yang baik. Masalahnya tentu saja NP-Hard. Para natural huersitics adalah menggunakan algoritma greedy (selalu memilih persegi panjang / strip yang menutupi sebagian besar area yang belum tercakup. Teknik alternatifnya adalah menggunakan reweighing. Ada beberapa hasil teoritis yang menarik, tetapi terus terang, tidak ada yang seharusnya terlalu berguna dalam praktik Salah satu hueristik menarik yang mungkin ingin Anda coba, adalah pertama-tama mendekomposisi poligon Anda menjadi jumlah minimal bentuk cembung (menggunakan algoritma pemrograman dinamis Keil), dan kemudian menutup setiap poligon cembung secara terpisah ...


Saya tidak terbiasa dengan algoritma Pemrograman Dinamis Keil. Namun, saya memang menemukan metode untuk bekerja menggunakan kombinasi dari Rectangle Inscription-Terbesar dan Minimum-Bounding Rectangle algoritma dengan beberapa varian berdasarkan heuristik.
Josh C.

2

Saya pikir makalah ini mungkin bisa membantu. Jelas itu bukan masalah yang sama - pada kenyataannya itu adalah masalah sebaliknya, meliputi sebuah persegi panjang dengan poligon - tetapi beberapa ide bisa menjadi titik awal. Secara khusus, masalah terbalik ini NP-keras dan saya menduga Anda mungkin juga (meskipun tidak ada perpanjangan pengurangan sejauh yang saya tahu).

E. Arkin, A. Efrat, G. Hart, I. Kostitsyna, A. Kroller, J. Mitchell, dan V. Polishchuk. Skandinavia Menipis di Atas Kue: Pada Kotak Satu Ukuran Terkecil-Cocok-Semua. Bersenang-senang dengan Algoritma . hal.16-27. 2012


1
Terima kasih atas saranmu. Saya telah bekerja dengan departemen teknik dan manufaktur di perusahaan saya untuk memberikan lebih banyak klarifikasi untuk masalah ini. Saya masih menunggu untuk mengonfirmasi, tetapi saya sekarang berpikir algoritma yang akan mengembalikan set persegi panjang bertuliskan terbesar akan bekerja. Meskipun tidak sepenuhnya menutupi bentuk, itu akan memberikan preferensi ke daerah ortognal sementara meninggalkan daerah non-ortogonal ke beberapa heuristik. Satu-satunya trik adalah memaksimalkan wilayah ortogonal tersebut. Lihat gambar terakhir saya dengan angka 9 seperti lamda.
Josh C.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.