Penghargaan untuk Hobi Calvin karena menyenggol gagasan tantanganku ke arah yang benar.
Pertimbangkan satu set poin di pesawat, yang akan kita sebut situs , dan kaitkan warna dengan masing-masing situs. Sekarang Anda dapat mengecat seluruh bidang dengan mewarnai setiap titik dengan warna situs terdekat. Ini disebut peta Voronoi (atau diagram Voronoi ). Pada prinsipnya, peta Voronoi dapat didefinisikan untuk metrik jarak apa pun, tetapi kami hanya akan menggunakan jarak Euclidean yang biasa r = √(x² + y²)
. ( Catatan: Anda tidak perlu harus tahu cara menghitung dan membuat salah satunya untuk bersaing dalam tantangan ini.)
Berikut ini adalah contoh dengan 100 situs:
Jika Anda melihat sel mana pun, maka semua titik di dalam sel itu lebih dekat ke situs yang sesuai daripada ke situs lain.
Tugas Anda adalah memperkirakan gambar yang diberikan dengan peta Voronoi. Anda diberi gambar dalam format raster grafis nyaman, serta integer N . Anda kemudian harus menghasilkan hingga N situs, dan warna untuk setiap situs, sehingga peta Voronoi berdasarkan situs-situs ini menyerupai gambar input sedekat mungkin.
Anda dapat menggunakan Stack Snippet di bagian bawah tantangan ini untuk membuat peta Voronoi dari output Anda, atau Anda dapat merendernya sendiri jika Anda mau.
Anda dapat menggunakan fungsi bawaan atau pihak ketiga untuk menghitung peta Voronoi dari sekumpulan situs (jika perlu).
Ini adalah kontes popularitas, jadi jawabannya dengan suara terbanyak menang. Pemilih didorong untuk menilai jawaban oleh
- seberapa baik gambar asli dan warnanya diperkirakan.
- seberapa baik algoritma bekerja pada berbagai jenis gambar.
- seberapa baik algoritma ini bekerja untuk N kecil .
- apakah algoritma secara adaptif mengelompokkan titik-titik di wilayah gambar yang memerlukan lebih detail.
Gambar Uji
Berikut adalah beberapa gambar untuk menguji algoritme Anda (beberapa tersangka biasa kami, beberapa yang baru). Klik gambar untuk versi yang lebih besar.
Pantai di baris pertama ditarik oleh Olivia Bell , dan termasuk dengan izinnya.
Jika Anda menginginkan tantangan ekstra, cobalah Yoshi dengan latar belakang putih dan luruskan perutnya.
Anda dapat menemukan semua gambar uji ini di galeri imgur ini di mana Anda dapat mengunduh semuanya sebagai file zip. Album ini juga berisi diagram Voronoi acak sebagai tes lain. Untuk referensi, berikut adalah data yang menghasilkannya .
Harap sertakan diagram contoh untuk berbagai gambar dan N yang berbeda , misalnya 100, 300, 1000, 3000 (serta pastebins ke beberapa spesifikasi sel yang sesuai). Anda dapat menggunakan atau menghilangkan tepi hitam di antara sel yang Anda inginkan (ini mungkin terlihat lebih baik pada beberapa gambar daripada yang lain). Jangan sertakan situsnya (kecuali dalam contoh terpisah, mungkin jika Anda ingin menjelaskan cara kerja penempatan situs Anda, tentu saja).
Jika Anda ingin menunjukkan sejumlah besar hasil, Anda dapat membuat galeri di imgur.com , agar ukuran jawaban tetap masuk akal. Atau, letakkan gambar kecil di pos Anda dan buat tautan ke gambar yang lebih besar, seperti yang saya lakukan pada jawaban referensi saya . Anda bisa mendapatkan thumbnail kecil dengan menambahkan s
nama file di tautan imgur.com (mis. I3XrT.png
-> I3XrTs.png
). Juga, jangan ragu untuk menggunakan gambar uji lain, jika Anda menemukan sesuatu yang bagus.
Renderer
Tempelkan output Anda ke dalam Stack Snippet berikut untuk membuat hasil Anda. Format daftar yang tepat tidak relevan, selama setiap sel ditentukan oleh 5 angka floating point dalam urutan x y r g b
, di mana x
dan y
merupakan koordinat situs sel, dan r g b
merupakan saluran warna merah, hijau dan biru dalam kisaran 0 ≤ r, g, b ≤ 1
.
Cuplikan menyediakan opsi untuk menentukan lebar garis tepi sel, dan apakah situs sel harus ditampilkan atau tidak (yang terakhir sebagian besar untuk tujuan debugging). Tetapi perhatikan bahwa output hanya dirender ulang ketika spesifikasi sel berubah - jadi jika Anda memodifikasi beberapa opsi lain, tambahkan spasi ke sel atau sesuatu.
Penghargaan besar kepada Raymond Hill untuk menulis perpustakaan JS Voronoi yang sangat bagus ini .