ต้นไม้แบบไดนามิก
Box2Dเป็นเครื่องมือดีที่สุดการออกแบบโดยมีประสบการณ์ฟิสิกส์เกม / โปรแกรมเมอร์ เดิมที Box2D ใช้ตารางแฮชที่ต้องการความสูงและความกว้างคงที่
เมื่ออีรินอัพเกรดเป็นอัลกอริธึมการแพร่กระจายสัญญาณที่ดีขึ้นเขาไปกับ btDbvt ของ Nathanael Presson นี่คือกว้างยาวที่ใช้โดยกระสุนฟิสิกส์ Erin ปรับเปลี่ยนและเพิ่มประสิทธิภาพอัลกอริทึมสำหรับ 2d
คุณสามารถอ่านภาพระดับสูงมากในคู่มือ Box2D (§4.11หรือค้นหา Dynamic Tree)
ต่อไปนี้เป็นข้อยกเว้นจากเอกสารในรหัส (ซึ่งถือว่าดีมากเพราะไม่ได้เป็นส่วนหนึ่งของ API สาธารณะ)
ต้นไม้ AABB แบบไดนามิกช่วงกว้างได้รับแรงบันดาลใจจาก Nathanael Presson btDbvt ต้นไม้แบบไดนามิกจัดเรียงข้อมูลในต้นไม้แบบไบนารีเพื่อเร่งการสืบค้นเช่นปริมาณการค้นหาและการฉายรังสี ใบไม้เป็นพร็อกซีที่มี AABB ในทรีเราขยายพร็อกซี AABB โดย b2_fatAABBFactor เพื่อให้พร็อกซี AABB มีขนาดใหญ่กว่าวัตถุไคลเอนต์ สิ่งนี้ช่วยให้วัตถุไคลเอนต์ย้ายตามจำนวนเล็กน้อยโดยไม่ทริกเกอร์การปรับปรุงทรี
โหนดถูกรวมและเปลี่ยนตำแหน่งดังนั้นเราจึงใช้ดัชนีโหนดแทนพอยน์เตอร์
ความเข้าใจของฉันเกี่ยวกับอัลกอริทึมของ Dynamic Tree คือสิ่งนี้ ต้นไม้แบบไดนามิกเป็นไม้กางเขนระหว่างต้นไม้ไบนารี avlคลาสสิกและควอดทรี ผลสุดท้ายคือควอดทรีที่แยกแต่ละโหนดเพียงครึ่งเดียวและเส้นแบ่งไม่คงที่ (สองครึ่งไม่เท่ากับขนาดเท่าต้นไม้รูปสี่เหลี่ยม) AVL เข้ามาเพราะ quadree ที่มีการแยกแบบไดนามิกสามารถทำให้ความเร็วในการค้นหารายการลดลง (O (n)) AVL ใช้เพื่อปรับสมดุลทรีย่อยดังนั้นเพื่อให้แน่ใจว่าความเร็วในการค้นหา O lg (N)
ส่วนที่ดีที่สุดของรหัสคือ MIT ดังนั้นอย่าลังเลที่จะคัดลอก / มา / ไร้ยางอาย / ฯลฯ