Saya akan memecahkan masalah ini dengan dua lintasan diagram Voronoi:
Lulus Pertama: Partisi Wilayah
Lulus pertama akan menggunakan distribusi titik yang agak jarang (yaitu jarak antara titik-titik tersebut harus relatif besar) untuk membagi pulau secara kasar menjadi beberapa wilayah (lihat catatan di bawah mengenai pembangkitan titik). Selanjutnya buat diagram Voronoi berdasarkan poin-poin ini. Ini akan membagi pulau menjadi daerah poligon di sekitar setiap titik seperti yang ditunjukkan di bawah ini:
Lulus Kedua: Pengacakan Batas
Sekarang pulau itu telah dibagi menjadi beberapa wilayah, maka langkah selanjutnya adalah 'mengacaukan' batas antara mereka. Untuk melakukannya, hasilkan lapisan poin baru menggunakan distribusi titik yang lebih kompak (yaitu jarak antara titik harus kecil) dan lagi gunakan titik-titik ini untuk membuat diagram Voronoi lain. Selanjutnya untuk setiap wilayah yang lebih kecil, tetapkan ke wilayah yang lebih besar dengan memeriksa titik 'seed' -nya. Ini akan menghasilkan batas yang lebih bergerigi antara subdivisi yang lebih besar. Berikut ini adalah tampilan dari apa yang tampak dengan kedua diagram Voronoi:
Dan inilah area yang sama yang hanya menunjukkan batas akhir:
Komentar tentang Point Generation
Mengenai pembuatan poin, saya suka menggunakan distribusi disk Poisson untuk mendapatkan distribusi poin yang relatif bagus & merata. Pilihan umum lainnya adalah untuk mendapatkan distribusi genap yang sama adalah dengan menggunakan algoritma Lloyd pada set poin acak 'reguler'. LLoyd lebih mudah untuk dikodekan, tetapi dapat mengambil beberapa percobaan & kesalahan untuk menentukan berapa banyak pass yang diperlukan untuk memberikan hasil yang diinginkan.
Satu potensi masalah dengan pendekatan ini adalah bahwa partisi pass pertama dapat menghasilkan beberapa daerah yang sangat kecil. Jika Anda tidak menginginkan mereka dalam hasil akhir Anda, saya hanya akan menggabungkannya dengan wilayah yang berdekatan secara acak.
Catatan Akhir
Ilustrasi yang saya berikan kebetulan merupakan gambar raster, tetapi teknik ini juga berfungsi dengan representasi poligon / vektor.