Poligon dalam masalah generalisasi poligon

9

Saya ingin meminta maaf kepada semua posting di bawah ini. Memilih forum yang salah untuk memposting ini pada awalnya. Namun alih-alih membuat ini sia-sia saya telah mengolah pertanyaan menjadi masalah "Theoretical Computer Science" yang sebenarnya.

Masalah: Buat algoritme yang mengambil sekumpulan n titik yang dipesan dalam bidang 2D yang membentuk kontur poligon A sederhana yang mungkin cekung atau tidak dan membuat poligon B baru dengan titik m sedemikian rupa:

  1. semua poin dalam A terkandung dalam B
  2. 3 <= m <n
  3. B adalah poligon dalam himpunan semua B dengan area terkecil
  4. B harus berupa poligon sederhana (yaitu tidak ada persimpangan-sendiri).
  5. Input ke algoritma adalah poligon A dan "m".
  6. Kebetulan segmen di B dengan segmen di A diizinkan.

Beberapa contoh input dan output yang diharapkan:

  1. Jika A adalah kuadrat dan m adalah 3 maka B akan menjadi segitiga dengan luas permukaan terkecil yang mengandung A.
  2. Jika A adalah segi enam dan m adalah 4 maka B akan menjadi segiempat dengan luas permukaan terkecil yang mengandung A.

Semoga sukses untuk semua orang yang mencoba masalah ini. Saya bisa berjanji ini akan sangat sulit terutama sekarang karena solusinya harus optimal.

Thirlan
sumber
1
@ Jo: Tidak benar: Jika A adalah kuadrat, maka Thirian meminta segitiga area minimum yang mengandung A. Di sisi lain, jika A adalah segitiga ( ) maka memang tidak ada solusi yang valid. n=3
Jeffε
3
Tambahkan 17 ke komentar pertama saya, saya kira. Mengapa 20?
Jeffε
3
Bukankah FFT merupakan ambang rendah untuk "rumit"?
Sasho Nikolov
2
Saya tidak berpikir itu sepenuhnya benar bahwa masalahnya tidak berubah sama sekali jika Anda (katakanlah) menetapkan m = 3. Masalahnya adalah Anda mungkin memerlukan waktu eksponensial dalam m, dan itu tidak masalah jika m diperbaiki ke beberapa nomor, tetapi tidak baik jika m adalah bagian dari input.
Suresh Venkat
5
"semua orang tahu apa masalahnya" itu tidak benar. Kami bertanya karena pilihan yang tidak ditentukan membuat perbedaan.
Suresh Venkat

Jawaban:

10

Saya tidak tahu bagaimana poligon Anda terlihat, tetapi mungkin versi sederhana dari algoritma Ramer – Douglas – Peucker sudah cukup:

  • untuk setiap bagian cembung , hitung luas dari segitiga P i P i + 1 P i + 2 yang dibentuk oleh tiga titik berurutan;SEBUAHjPsayaPsaya+1Psaya+2
  • untuk setiap bagian cekung , hitung luas dari dua segitiga P i P i P i + 1 dan P i + 1 P i + 2 P i + 2 yang dibentuk oleh perluasan dua titik P i , P i + 2 dan titik tengah P i + 1BkPsayaPsayaPsaya+1Psaya+1Psaya+2Psaya+2Psaya,Psaya+2Psaya+1
  • hitung dan hapus titik yang sesuai (dan titik bergeser jika operasi dilakukan pada bagian cekung);msayan{SEBUAHj,Bk}
  • loop sampai titik telah dihapus.n-m

masukkan deskripsi gambar di sini
Batas poligon ( segitiga hijau, B k segitiga merah). Di sebelah kanan, perbatasan setelah eliminasi dua poin.SEBUAHjBk

Untuk algoritma yang lebih kompleks, Anda dapat mencari " teknik generalisasi poligon " meskipun kondisi pertama Anda (titik-titik dalam A terkandung dalam B) menyiratkan beberapa operasi penskalaan tambahan.

Marzio De Biasi
sumber
@ Suresh: Saya cukup yakin bahwa 4 upvotes saat ini adalah untuk transparansi, bukan untuk algoritma (hampir sepele) :)
Marzio De Biasi
1
Ini mengalami masalah yang sama dengan algoritma Ramer-Douglas-Peucker: Output tidak dijamin menjadi poligon sederhana!
Jeffε
1
@ Jeff: Anda benar, tetapi (jauh dari optimal jika poligonnya kompleks) orang dapat menghindari penyederhanaan yang mengarah pada konflik . Pada akhirnya, jika ada poin lain yang harus dihilangkan tetapi poligon non-sederhana tidak dapat dihindari, gunakan metode resolusi konflik (misalnya menghitung titik persimpangan dan benar-benar membuang "lubang"). Namun saya ingin melihat contoh nyata dari OP.
Marzio De Biasi
1
@MarzioDeBiasi Itu mungkin berhasil. Tapi mungkin tidak. Saya pikir itu mungkin untuk setiap penyederhanaan yang Anda gambarkan menyebabkan persimpangan-diri. Dan "membuang loop" bisa membuat segalanya lebih buruk, tidak lebih baik. Ini mungkin solusi yang baik dalam praktik, tetapi ingat di mana kita berada!
Jeffε
Terima kasih Marzio, setidaknya sekarang saya tahu masalah apa yang disebut sekarang! Sayangnya solusi yang Anda berikan adalah apa (3) dan (4) dalam solusi yang saya sarankan dan (4) memiliki masalah dengannya. Elips yang sangat memanjang, dan dengan demikian memiliki ujung tajam dengan sudut sekitar 30 derajat dan kurang, akan dengan mudah melanggar persyaratan (1).
Thirlan
6

Saya menulis makalah dulu yang merinci algoritme linear-waktu untuk menemukan segitiga area terkecil yang menyertakan set titik (atau poligon):

J. O'Rourke, Alok Aggarwal, Sanjeev Maddila, Michael Baldwin, "Algoritma yang optimal untuk menemukan segitiga penutup minimal," J. Algorithms , 1986, 7 : 258--269. Link .

Pekerjaan kami diikuti oleh algoritma umum:

"Minimum area membatasi poligon," Alok Aggarwal, JS Chang dan Chee K. Yap, The Visual Computer , Volume 1, Number 2 (1985), 112-117. Link .

Anda dapat menggunakan Google Cendekia untuk melacak makalah-makalah selanjutnya yang mengutip ini untuk menemukan perbaikan dan pekerjaan terkait.

Joseph O'Rourke
sumber