Dinamik Ağaç
Box2D , deneyimli bir fizik / oyun programcısı tarafından tasarlanmış iyi optimize edilmiş bir motordur . Başlangıçta Box2D sabit bir yükseklik ve genişlik gerektiren bir karma ızgara kullanıyordu.
Erin daha iyi bir geniş faz algoritmasına yükseldiğinde Nathanael Presson'un btDbvt ile gitti. Bu, Bullet Physics tarafından kullanılan geniş faz. Erin algoritmayı 2d için değiştirdi ve optimize etti.
Box2D kılavuzunda süper yüksek seviyeli bir mesajı okuyabilirsiniz (§4.11 veya Dinamik Ağacı arayabilirsiniz).
Kod içi dokümantasyon dışında (genel API'nin bir parçası olmadığı düşünülürse çok iyi).
Nathanael Presson'un btDbvt'sinden esinlenen dinamik bir AABB ağacı geniş fazı. Dinamik bir ağaç, hacim sorguları ve ışın yayınları gibi sorguları hızlandırmak için ikili bir ağaçtaki verileri düzenler. Yapraklar AABB'li vekillerdir. Ağaçta, AABB proxy'sinin istemci nesnesinden daha büyük olması için b2_fatAABBFactor tarafından proxy AABB'yi genişletiyoruz. Bu, istemci nesnesinin bir ağaç güncelleştirmesini tetiklemeden küçük miktarlarda hareket etmesini sağlar.
Düğümler toplanır ve yeniden konumlandırılabilir olduğundan, işaretçiler yerine düğüm dizinleri kullanırız.
Dinamik Ağacın algoritmasını anlamam bu. Dinamik ağaç, klasik bir avl ikili ağacı ile dörtlü arasındaki çarpıdır. Son etki, yalnızca her düğümü ikiye ayıran ve bölünmüş çizginin sabit olmadığı bir dörtlüdür (iki yarım dörtlü bir ağaç gibi eşit büyüklükte değildir). AVL devreye girer çünkü dinamik bölmeli dörtlü esasen bir listeye (O (n) arama hızı) dejenere olabilir. AVL, alt ağaçların yeniden dengelenmesinde kullanılır, böylece O lg (N) arama hızını sağlar.
Tüm kodların en iyisi MIT'dir, bu nedenle kopyalamaktan / türetilmiş / utanmadan çalmaktan vb. Çekinmeyin.