Saya menggunakan pencarian jalan di permainan saya untuk memimpin massa ke pemain lain (untuk mengejar mereka). Ini berfungsi untuk membuat mereka melampaui pemain, tapi saya ingin mereka berhenti sedikit sebelum tujuan mereka (jadi memilih simpul kedua dari belakang bekerja dengan baik).
Namun, ketika banyak gerombolan mengejar ponsel mereka kadang-kadang "menumpuk satu sama lain". Apa cara terbaik untuk menghindari ini? Saya tidak ingin memperlakukan massa sebagai buram dan terhalang (karena mereka tidak, Anda dapat berjalan melalui mereka) tetapi saya ingin massa memiliki beberapa rasa struktur.
Contoh:
Bayangkan bahwa setiap ular membimbing dirinya sendiri kepada saya dan harus mengelilingi "Setsuna". Perhatikan bagaimana kedua ular telah memilih untuk menggonggong saya? Ini bukan persyaratan yang ketat; bahkan sedikit diimbangi tidak apa-apa. Tetapi mereka harus "mengelilingi" Setsuna.
sumber
Jawaban:
Berikan agen Anda "muatan elektrostatik" yang lemah untuk membuat mereka saling tolak, di sepanjang garis hukum Coulomb .
Dengan asumsi untuk kesederhanaan bahwa massa harus mendorong satu sama lain dengan kekuatan yang setara, itu harus cukup untuk menerapkan kekuatan antara setiap pasangan massa dengan besarnya
some_constant / distance^2
, di manasome_constant
kekuatan tolakan yang dapat dikonfigurasi dandistance
jarak memisahkan mereka.Kekuatan tolakan kemudian jatuh dengan kuadrat jarak.
Nature of Code memiliki contoh yang bagus (dengan demo langsung) di sini . Ini terlihat seperti ini:
Mencocokkan setiap elemen dengan elemen lainnya adalah operasi kuadratik-waktu (
O(n^2)
). Jika Anda memiliki sangat banyak agen, Anda mungkin ingin mengoptimalkan perhitungan gaya dengan pendekatan Barnes-Hut , yang membawanya ke log-linear (O(n log n)
) tetapi membutuhkan quadtree .sumber
Pendekatan saya mirip dengan @ Anko, tetapi berdasarkan pada karya Millington dan Funge dari Artificial Intelligence for Games .
Ini akan terlihat seperti perilaku Pemisahan, tetapi Anda harus mempertimbangkan bahwa kecepatan ini harus dihitung dengan kecepatan agen dalam fungsi Pembaruannya.
sumber