Saat ini saya sedang mengerjakan pathfinding A * pada grid dan saya ingin memuluskan path yang dihasilkan, sambil juga mempertimbangkan sejauh mana karakter bergerak di sepanjang itu. Saya menggunakan kotak untuk pathfinding, namun pergerakan karakter bebas roaming, bukan pergerakan ubin ke ubin yang ketat.
Untuk mencapai jalur yang lebih mulus dan lebih efisien, saya melakukan penelusuran garis pada kisi untuk menentukan apakah ada ubin yang tidak dapat dikunci di antara ubin untuk memotong sudut yang tidak perlu.
Namun, karena jejak garis adalah batas nol, itu tidak mempertimbangkan sejauh mana karakter dan memberikan hasil yang buruk (tidak mengembalikan ubin yang tidak dapat dikunci hanya terlewatkan oleh garis, menyebabkan tabrakan yang tidak diinginkan).
Jadi yang saya cari bukan algoritma garis yang menentukan ubin di bawahnya, saya mencari yang menentukan ubin di bawah garis luas ubin. Ini adalah gambar untuk membantu memvisualisasikan masalah saya!
Adakah yang punya ide? Saya telah bekerja dengan garis Bresenham dan alternatif lain tetapi saya belum menemukan cara untuk mengatasi masalah khusus ini.
sumber
Jawaban:
Bagaimana jika Anda menggambar garis dari setiap sudut 'ubin' Anda berada di setiap sudut ubin yang ingin Anda tuju. Anda bahkan dapat mengoptimalkan ini ke 3 baris, bukan empat. Tidakkah ini mendeteksi semua ubin di jalur dengan benar?
Adapun jalur yang lebih mulus, periksa artikel tentang 'perilaku kemudi' terutama yang menggabungkannya dengan A * misalnya tautan ini:
sumber
Saya baru saja mengimplementasikan algoritma ini untuk permainan saya beberapa hari yang lalu! (-8
Inilah ide saya dalam bentuk gambar:
Perhatikan bahwa algoritma ini bekerja dengan persegi panjang dengan ukuran berapa pun. ini didasarkan pada kenyataan bahwa salah satu sudut persegi panjang selalu bertabrakan terlebih dahulu dengan garis kisi apa pun. Ini berarti bahwa Anda hanya dapat melacak satu sinar, dan mendapatkan semua persimpangan yang Anda butuhkan.
Berikut algoritma langkah-demi-langkah:
Ada beberapa kasus tepi di sini, seperti ketika sinar persis vertikal / horizontal, atau ketika menyentuh sudut persis, tetapi mereka tidak sulit.
sumber
Prosedur ini merupakan adaptasi dari bresenham, yang memecahkan pertanyaan orisinal.
sumber