【发布时间】:2011-06-26 07:05:24
【问题描述】:
我正在尝试使用四叉树进行 2D 碰撞检测,但我对如何实现它有点困惑。首先,我有一个四叉树,它包含四个子树(一个代表每个象限),以及一组不适合单个子树的对象。
在检查树中的对象是否有碰撞时,我会做这样的事情(感谢QuadTree for 2D collision detection):
- 检查对象是否与当前节点中的任何对象发生冲突。
- 对于空间与对象重叠的任何子树,递归。
要查找四叉树中的所有碰撞:
- 检查当前节点中的每个对象与当前节点中的其他对象。
- 根据每个子树检查当前节点中的每个对象。
插入四叉树:
- 如果对象适合多个子树,则将其添加到当前节点,然后返回。
- 否则,递归到包含它的任何子树。
更新四叉树:
- 递归到每个子树。
- 如果当前节点中的任何元素不再完全适合当前树,请将其移至父节点。
- 如果当前节点中的任何元素适合子树,则将其插入子树。
这样好吗?可以改进吗?
【问题讨论】:
-
按照您描述的方式实现它,我已经这样做了,Dave O. 也这样做了,这更容易编码,而且速度更快。管理更多列表以跟踪您的所有叶子会增加可避免的开销。这是我的一个版本的源代码(Java):Steerio
标签: data-structures collision game-physics quadtree