Mengerjakan permainan saya, saya berada pada titik di mana saya perlu melacak semua unit di dunia sehingga saya dapat melakukan pemeriksaan tetangga terdekat untuk pertempuran. Ini adalah permainan seperti RTS, dengan kemungkinan ribuan unit otomatis kecil bergerak.
Saya telah mencari di KD-Trees dan Quadtrees (terutama Point Quadtrees). Saya masih mencoba mempelajari detail cara kerjanya, tetapi sejauh ini Point Quadtrees paling masuk akal bagi saya. Namun, saya mendapat kesan bahwa KD-Trees lebih cepat untuk mencari, yang penting dengan jumlah poin yang saya miliki di pohon.
Di sisi lain, dalam kasus saya, saya akan melacak sejumlah besar unit yang selalu bergerak. Dari bingkai ke bingkai, posisi mereka akan selalu berbeda. Quadtrees tampaknya lebih cepat untuk menyeimbangkan kembali daripada KD-Trees, tapi saya tidak tahu apakah itu berlaku ketika Anda menyeimbangkan kembali setiap titik di pohon.
Saya bertanya-tanya apakah akan lebih baik dalam hal ini untuk hanya memotong pohon setiap frame dan membangunnya kembali dari awal, daripada mencoba untuk menyeimbangkan kembali setiap titik di pohon? Jika Quadtree lebih cepat menyeimbangkan kembali, apakah itu juga berarti lebih cepat untuk membangun dari awal? Jika demikian, itu mungkin lebih penting untuk kinerja daripada kecepatan pencarian KD-Tree, tergantung pada seberapa banyak beban untuk membuat pohon, tapi saya tidak tahu ...
Saran Lærne sangat bagus, tetapi saya juga akan menyarankan pohon volume dinamis AABB. Secara konseptual, dynamic volume bounding tree menyimpan pohon node yang seimbang yang dapat ditanyakan kapan saja untuk elemen-elemen dekat dengan melewatkan AABB dan mengambil pasangan yang tumpang tindih. Pohon itu tidak dibangun kembali setiap frame. Sebaliknya AABB setiap node sedikit meningkat ketika dimasukkan ke dalam pohon, dan pohon hanya dibangun kembali setiap kali AABB aktual node tidak lagi terkandung oleh AABB meningkat. Saya menggunakannya di mesin fisika saya dan bekerja dengan sangat baik.
Kode sumber Box2D memiliki implementasi yang hebat.
https://github.com/erincatto/Box2D/blob/master/Box2D/Box2D/Collision/b2DynamicTree.h
Berikut ini adalah ulasan yang baik tentang implementasi mereka:
http://www.randygaul.net/2013/08/06/dynamic-aabb-tree/
sumber