Pertanyaan saya adalah apa yang akan menjadi pendekatan terbaik untuk merintis jalan di permukaan planet yang tidak rata?
Informasi latar belakang
Saya telah membuat sebuah planet dari pemetaan perpindahan 6 bidang yang diproyeksikan. Pesawat awalnya membentuk kubus sebelum diproyeksikan menjadi bentuk bola.
Saya ingin tahu apakah mungkin untuk menggunakan setiap "sphere projected cube face" sebagai kisi-kisi dan menggunakan algoritma A * sederhana untuk menemukan rute terbaik, saya juga ingin ketinggian perpindahan diperhitungkan sehingga jalur menghindari pendakian pegunungan dll (saya kira ini hanya akan menjadi heuristik dalam algoritma A *) Pertimbangan lain adalah bahwa saya telah mencapai pergerakan planet dengan memanfaatkan mesin fisika Unity3d, menerapkan gravitasi ke pusat planet. Apakah solusi yang saya usulkan memerlukan gerakan agen untuk dikontrol secara independen ke fisika gravitasi.
Untuk membantu mengartikulasikan pertanyaan saya dengan lebih baik, inilah tubuh planet saya saat ini:
Jawaban:
Sepertinya Anda sudah menjawab pertanyaan Anda sendiri. A * kemungkinan merupakan pendekatan terbaik. Ya tentu saja dapat digunakan dengan cara yang Anda gambarkan, termasuk menggunakan informasi ketinggian untuk menghindari gunung. Selama Anda dapat mengakses informasi tentang kisi apa pun di permukaan dunia Anda, tidak ada alasan Anda tidak dapat menggunakannya dalam heuristik A *.
Akhirnya, Anda bingung mencari jalur dengan mengikuti jalur di akhir pertanyaan Anda. Menemukan jalan tidak peduli dengan gravitasi, kecuali jika Anda menambahkannya sebagai heuristik dan karena Anda berada di permukaan sebuah planet, gravitasi pada dasarnya akan sama di seluruh permukaan. Banyak permainan memiliki gravitasi bersama dengan gerakan, saya tidak melihat alasan Anda tidak bisa.
Pada dasarnya kami ingin memetakan dari merah ke biru, untuk menjadi sama di bola seperti di kubus.
Karena A * sering membuat tetangga ke node saat ini, Anda dapat dengan mudah membuat satu set fungsi untuk mendapatkan node yang berdekatan. Sebagai contoh,
getXPlus()
,getXMinus()
,getZPlus()
dan sebagainya. Fungsi-fungsi ini akan mengambil simpul saat ini dan mengembalikan simpul ke arah yang ditentukan oleh nama fungsi.Sebagian besar waktu fungsi-fungsi ini hanya bisa menambah nilai dan dilakukan, namun, di tepi, itu akan berubah.
Anda ingin memetakan permukaan kubus Anda ke sistem koordinat 2D. Namun Anda melakukan ini terserah Anda, mereka tidak harus berbaris, cukup beri masing-masing ruang grid koordinat X, Y yang unik.
Sekarang ketika berada di tepi, dan mendapatkan ruang grid yang berdekatan itu tidak harus hanya akan menambah koordinat. Kita harus mencari tahu di mana wajah kita bergerak dan beralih ke koordinat wajah itu.
Misalnya, mendapatkan koordinat XPlus di sini akan mengubah koordinat X dan Y karena kita pindah ke ruang kisi baru pada wajah baru. Garis hijau mewakili tepi antara dua wajah.
Sekarang ini hanya koordinat global, mungkin lebih mudah untuk menggunakan sistem koordinat lokal internal, dengan dimensi ke-3 yang mewakili permukaan kubus yang saat ini Anda gunakan.
Either way, Anda harus memiliki koordinat unik untuk setiap ruang kotak di muka kubus. Beralih di antara mereka akan tergantung pada bagaimana Anda menerapkan sistem koordinat. Anda perlu tahu di mana peta itu terkoordinasi dengan permukaan bola juga.
Semua ini pada akhirnya harus disarikan sehingga Anda bahkan tidak mengetahuinya.
sumber