我正在阅读一些关于QuadTrees的内容,以及如何使用它们进行更好的碰撞检测。但我不明白QuadTrees为什么会给我带来更多性能。 我在2D游戏中尝试这个。
如果我使用QuadTree,我必须清除QuadTree的每一帧并插入我的所有对象,然后我遍历这个以获取所有可能的碰撞对象。然后循环通过这个来获取我需要的碰撞对象。 为什么这样更好然后循环遍历所有的对象呢? 对于QuadTree,如果我正确,我需要O(n logn)。但是通过我所有对象的循环是O(n)
格尔茨
答案 0 :(得分:1)
将每个对象与所有其他对象进行比较是O(n ^ 2),因为您需要遍历所有对象(O(n)),并且对于每个对象,您需要检查(几乎)所有其他对象,这样就是另一个O (n),得到O(n ^ 2)。
这比O(n log n)更差。
如果您只有5个对象,那么将每个对象相互比较可能仍然会更便宜,因为您可以避免创建四叉树的开销。
此外,如果并非所有对象都改变其位置,您也可以重复使用四叉树。