Saya mencoba untuk menghasilkan peta bintang dua dimensi yang cukup besar yang menunjukkan faksi / negara yang berbeda, masing-masing memiliki satu atau lebih sistem bintang. Saya ingin secara otomatis membuat batas / area untuk fraksi.
Idenya adalah untuk dasarnya pergi dari sesuatu seperti ini (titik-titik mewakili sistem bintang pada pesawat 2d, warna adalah afiliasi faksi)
untuk ini
Membuat peta seperti ini sepertinya persyaratan yang cukup umum, jadi pertanyaan saya yang sebenarnya adalah ini: Apakah ada algoritma standar untuk menghasilkan area keadaan seperti yang ditunjukkan? Jika demikian, dapatkah Anda menunjukkannya kepada saya? Jika tidak, dapatkah Anda memikirkan algoritma yang baik (ide dasar atau kode semu baik-baik saja)?
Kinerja algoritma bukan masalah utama bagi saya, jadi saya lebih suka memiliki peta "lebih cantik" daripada yang lebih cepat untuk menghasilkan. Pertanyaan serupa ini menawarkan pendekatan yang mungkin berlaku untuk masalah saya, meskipun dengan beberapa "prettification" diperlukan: Cara membuat peta dari grafik
Biarkan saya menjelaskan apa yang saya maksud ketika saya mengatakan lebih cantik: Di bagian bawah pertanyaan terkait, penanya menyajikan hasil akhirnya setelah menerapkan jawaban yang diterima. Masalah pertama saya di sini: Area untuk node # 6, # 9 dan # 12 sangat kecil dan berbentuk aneh. Selain itu, daripada tepi yang tajam, saya lebih suka tampilan yang lebih halus dan melengkung.
Sejauh ini ide saya sendiri, termasuk kelemahan / pertanyaan yang saya lihat bersama mereka:
- Hasilkan poligon "convex hull" untuk setiap faksi, lalu perluas sedikit. Masalah: Tidak ada fitur cekung. Juga, bagaimana Anda menangani tumpang tindih?
- Hasilkan grafik voronoi untuk titik-titik, kemudian gunakan tepi poligon voronoi antara sistem tetangga dari faksi yang berbeda sebagai batas. Masalah: Poligon besar di tepi peta - bagaimana cara mengidentifikasi dan memperbaikinya?
- Hasilkan poligon ukuran tetap untuk setiap titik, satukan semua poligon untuk satu faksi tunggal (menghasilkan satu "faksi poligon" besar yang berpotensi kompleks). Kemudian lakukan sesuatu untuk merekonsiliasi area yang tumpang tindih antara dua faksi. Masalah: Bagaimana tepatnya saya melakukan ini? Bukan proses yang sepele. Bagaimana jika ada tumpang tindih antara lebih dari dua faksi?
Bantuan Anda dihargai.
Tambahan: Setelah memikirkan dua jawaban pertama dan pendekatan masing-masing untuk menyelesaikan masalah, saya menyadari bahwa persyaratan saya di atas tidak lengkap.
Saya harus menambahkan bahwa peta dapat memiliki daerah berpenduduk jarang, artinya mungkin ada bintang atau gugusan bintang yang terisolasi. Saya ingin menampilkan masing-masing cluster dengan area berwarna yang berdekatan. Sesuatu seperti ini:
Saya menyadari bahwa ini mungkin memerlukan langkah pertama yang mengidentifikasi cluster, dan kemudian menjalankan algoritma yang sebenarnya untuk masing-masing cluster.
Jawaban:
Saya pikir ide Voronoi bagus. Setiap bintang menjadi titik benih bagi Voronoi, dan kemudian wilayah Voronoi menunjukkan area yang dimiliki oleh setiap faksi. Namun, ada beberapa perubahan yang akan membuatnya bekerja lebih baik:
Inilah hasilnya:
Saya juga menulis halaman yang memungkinkan Anda mengecat daerah untuk melihat seperti apa mereka.
sumber
Salah satu dari banyak metode adalah peta pengaruh . Anda dapat mencari implementasi kode tertentu, tetapi algoritma dasarnya cukup sederhana.
Untuk setiap objek faksi (misalnya sistem bintang), tetapkan nilai positif (panas). Untuk semua objek faksi lain memberikan nilai negatif (dingin). Besarnya panas atau dingin harus didasarkan pada seberapa besar pengaruh Anda terhadap objek pada lingkungan dan tetangga. Nilai-nilai ini tidak harus proporsional jika Anda ingin mempertahankan "dmz" di antara faksi-faksi.
Gunakan detail ini untuk membuat kisi sementara (misalnya larik) yang mendekati piksel peta Anda. Anda dapat membangun kotak seperti itu untuk resolusi yang Anda inginkan termasuk 1: 1.
Selanjutnya, gunakan persamaan transfer panas / bidang untuk beralih dan menyebarkan kekuatan objek faksi (panas) terhadap kekuatan 'objek' musuh (dingin) untuk setiap sel tetangga di grid.
Bilas dan ulangi untuk setiap Fraksi di peta Anda dengan membuat kisi faksi terpisah untuk masing-masing.
Akhirnya, interpolasi kisi faksi bersama untuk menghasilkan kontur pengaruh untuk masing-masing faksi. Kemudian transfer kisi itu kembali ke peta piksel Anda dengan resolusi yang Anda gunakan untuk kisi (menambahkan warna khusus faksi, dll.).
Seni dalam proses ini adalah untuk menentukan seberapa besar pengaruh masing-masing objek dan elemen permainan apa yang Anda gunakan untuk mengukur nilai itu.
Selain itu, produk dari metode ini dapat digunakan untuk semua jenis hal lainnya, seperti pengambilan keputusan Anda.
Referensi tambahan: utas diskusi tentang asal-usul pemetaan pengaruh .
sumber
Anda harus melihat diagram Voronoi. Berikut ini definisi wikipedia:
Poin dasar biasanya dihasilkan secara acak dan sering disebut node. Dalam kasus Anda, setiap node bisa menjadi bintang Anda. Dengan begitu, faksi yang terkait dengan bintang-bintang dapat dikaitkan dengan sel voronoi yang mengelilingi bintang dan ketika setiap sel telah dihitung, Anda bergabung dengan mereka yang memiliki faksi yang sama bersama-sama dan Anda harus memiliki perbatasan yang cukup rapi di sekitar bintang Anda.
Pustaka FastNoise memiliki dukungan untuk Diagram Voronoi, jadi mungkin Anda harus melihatnya.
Menghaluskan daerah
Simpan bintang-bintang Anda di «array aman» dan gunakan salinannya di tempat Anda benar-benar menambahkan lebih banyak poin melalui interpolasi tetangga terdekat dan hasilkan diagram dari titik-titik itu. Ini akan memberi Anda daerah yang lebih halus.
Gagasan lain Algoritme keberuntungan didasarkan pada garis lurus yang menyapu bidang kartesius. Ide yang menarik adalah menggunakan lingkaran untuk menyapu pesawat dari pusat galaksi / ruang Anda, mungkin itu bisa mengarah pada beberapa bentuk menarik juga.
Manipulasi geometri
Gagasan terakhir Anda untuk menggabungkan poligon yang lebih kecil menjadi yang lebih besar dan kemudian memperbaiki tepinya akan membutuhkan algoritma spline canggih untuk memodifikasi bentuk. Tidak yakin apakah itu akan membuatnya efisien atau tampan. Saya cukup yakin bahwa diagram voronoi dengan tessellation ekstra adalah cara untuk pergi karena memperbaiki masalah tepi dengan sendirinya dan bahkan dapat menawarkan beberapa data tambahan dengan sendirinya seperti jarak dari perbatasan (yang dapat digunakan untuk menentukan zona konflik antara faksi yang berbeda, kemungkinan bertemu berbagai jenis kapal, dll.)
sumber