TL; DR; Masalah Anda bukan dengan melakukan fungsi jarak. Masalah Anda berkali-kali melakukan fungsi jarak. Dengan kata lain Anda membutuhkan optimasi algoritmik daripada yang matematis.
[EDIT] Saya menghapus bagian pertama dari jawaban saya, karena orang-orang membencinya. Judul pertanyaan menanyakan fungsi jarak alternatif sebelum diedit.
Anda menggunakan fungsi jarak di mana Anda menghitung akar kuadrat setiap kali. Namun, Anda bisa menggantinya tanpa menggunakan akar kuadrat sama sekali dan menghitung jarak kuadrat saja. Ini akan menghemat banyak siklus berharga Anda.
Jarak ^ 2 = x * x + y * y;
ini sebenarnya trik umum. Tetapi Anda perlu menyesuaikan perhitungan Anda dengan tepat. Ini juga dapat digunakan sebagai pemeriksaan awal sebelum menghitung jarak yang sebenarnya.
Jadi sebagai contoh alih-alih menghitung jarak aktual antara dua titik / bola untuk tes persimpangan, kita dapat menghitung Distance Squared sebagai gantinya dan membandingkan dengan radius kuadrat alih-alih radius.
Edit, setelah @ Byte56 menunjukkan bahwa saya tidak membaca pertanyaan, dan bahwa Anda mengetahui optimasi jarak kuadrat.
Nah dalam kasus Anda, sayangnya kita berada dalam grafik komputer yang hampir secara eksklusif berurusan dengan Euclidean Space , dan jarak didefinisikan dengan tepat seperti Sqrt of Vector dot itself
dalam ruang euclidean.
Jarak kuadrat adalah perkiraan terbaik yang akan Anda dapatkan (dalam hal kinerja), saya tidak bisa melihat apa pun mengalahkan 2 perkalian, satu tambahan, dan tugas.
Jadi Anda bilang saya tidak bisa mengoptimalkan fungsi jarak apa yang harus saya lakukan?
Masalah Anda bukan dengan melakukan fungsi jarak. Masalah Anda berkali-kali melakukan fungsi jarak. Dengan kata lain Anda membutuhkan optimasi algoritmik daripada yang matematis.
Intinya adalah, alih-alih memeriksa persimpangan pemain dengan setiap objek dalam adegan, setiap frame. Anda dapat dengan mudah menggunakan koherensi spasial untuk keuntungan Anda, dan hanya memeriksa objek yang berada di dekat pemain (yang paling mungkin untuk mengenai / berpotongan.
Ini dapat dengan mudah dilakukan dengan benar-benar menyimpan info spasial tersebut dalam struktur data partisi spasial . Untuk permainan sederhana, saya akan menyarankan Grid karena pada dasarnya mudah diterapkan dan cocok dengan adegan dinamis dengan baik.
Setiap sel / kotak berisi daftar objek yang dilampirkan oleh kotak pembatas kisi. Dan mudah untuk melacak posisi pemain di sel-sel itu. Dan untuk perhitungan jarak, Anda hanya memeriksa jarak pemain dengan benda-benda di dalam sel tetangga atau yang sama, bukan semua yang ada di layar.
Pendekatan yang lebih rumit adalah dengan menggunakan BSP atau Octrees.