为什么我应该使用带有碰撞检测的四叉树
Why I should use QuadTree with Collision Detection
我正在阅读一些关于QuadTrees以及如何使用它们进行更好的碰撞检测的信息。但我不明白为什么QuadTrees能给我带来更多的性能。我正在 2D 游戏中尝试这个。
如果我使用的是四叉树,我必须在四叉树的每一帧上清除并插入我的所有对象,然后我循环访问它以获得所有可能的碰撞对象。然后循环通过它来获得我需要的碰撞对象。为什么这比遍历我的所有对象更好?对于四叉树,如果我正确的话,我需要 O(n logn)。但是通过我所有对象的循环是 O(n)
格莱兹
将每个对象与所有其他对象进行比较是 O(n^2),因为您需要遍历所有对象 (O(n)),对于每个对象,您需要检查(几乎)所有其他对象,所以这是另一个 O(n),结果为 O(n^2)。
这比 O(n log n) 更糟糕。
如果您只有 5 个左右的对象,将每个对象与其他对象进行比较可能仍然更便宜,因为您可以避免创建四叉树的开销。
此外,如果不是所有对象都更改其位置,则可以重用四叉树。
相关文章:
- 如何查找值是否存在于二叉树中
- 逐像素碰撞检测弹球
- 砖块和球之间的碰撞检测(使用数字数组)
- 为什么我应该使用带有碰撞检测的四叉树
- 要插入二叉树的第一个元素,请将其放在左边还是右边
- 具有多个块的html5画布碰撞检测
- D3js地图标记碰撞检测
- javascript中两个正方形之间的碰撞检测
- 使用canvas+javascript进行2D碰撞检测
- 为什么我的碰撞检测在 Phaser 中不起作用
- 方向碰撞检测
- 圆圈碰撞检测 HTML5 画布
- FPS 游戏中的碰撞检测使用三个.js
- Javascript - 如何设置碰撞检测系统
- JavaScript数据结构:优先级队列,字典,平衡二叉树
- 使用任意 x 和 y 名称初始化 D3 四叉树
- 与二维碰撞有关的四叉树
- XY坐标到Javascript中的四叉树
- 在区域四叉树中实现插入/删除/查询范围
- 了解Javascript D3可视化四叉树