Pohon Dinamis
Box2D adalah mesin yang dioptimalkan dengan baik yang dirancang oleh programmer fisika / game berpengalaman . Awalnya Box2D menggunakan kotak hash yang membutuhkan tinggi dan lebar tetap.
Ketika Erin meningkatkan ke algoritma broadphase yang lebih baik, ia pergi dengan btDbvt Nathanael Presson. Ini adalah broadphase yang digunakan oleh Bullet Physics. Erin memodifikasi dan mengoptimalkan algoritme untuk 2d.
Anda dapat membaca overiew level super tinggi di manual Box2D (§4.11, atau mencari Dynamic Tree).
Berikut ini kecuali dari dokumentasi kode dalam (yang sangat bagus mengingat itu bukan bagian dari API publik).
Fase lebar pohon AABB yang dinamis, terinspirasi oleh btDbvt Nathanael Presson. Pohon dinamis mengatur data dalam pohon biner untuk mempercepat kueri seperti kueri volume dan gips. Leafs adalah proksi dengan AABB. Di pohon kami memperluas proxy AABB oleh b2_fatAABBFactor sehingga proxy AABB lebih besar dari objek klien. Ini memungkinkan objek klien untuk bergerak dalam jumlah kecil tanpa memicu pembaruan pohon.
Node dikumpulkan dan direlokasi, jadi kami menggunakan indeks node daripada pointer.
Pemahaman saya tentang algoritma Dynamic Tree adalah ini. Pohon Dinamis adalah persilangan antara pohon biner avl klasik dan quadtree. Efek akhirnya adalah quadtree yang hanya membelah setiap node menjadi dua, dan garis split tidak tetap (dua bagian tidak sama ukurannya seperti pohon quad). AVL masuk karena kuadrat dengan pemisahan dinamis dapat berubah menjadi dasarnya daftar (O (n) kecepatan pencarian). AVL digunakan untuk menyeimbangkan kembali subtree sehingga untuk memastikan kecepatan pencarian O lg (N).
Yang terbaik dari semua kode adalah MIT sehingga merasa bebas untuk menyalin / berasal / mencuri-malu / dll.