【发布时间】:2016-02-24 20:53:35
【问题描述】:
我目前正在使用四叉树实现碰撞检测系统。我能够实现四叉树,但我对特定情况有疑问。 假设我的初始四叉树的边界为 200x200。所以我的第一级子四叉树将有一个边界:
西北:(0, 0) ~ (100,100)
SW: (0, 100) ~ (100, 200)
NE: (100, 0) ~ (200, 100)
SE: (100, 100) ~ (200, 200)
假设在 (98, 98) 处有一个正方形对象,它的宽度和高度为 5。我将它们插入子树时取中心位置,因此该对象将放置在 NW 四叉树中。然而,由于它的宽度和高度都是 5,因此它们在技术上也在所有其他 3 个四叉树上。我是否必须检查对象的边界是否跨越四叉树的另一侧,如果是,将多个实例添加到四叉树中?
【问题讨论】:
-
如果您要创建 2D 碰撞检测,请考虑改用固定网格。它几乎肯定会更快(尤其是在仔细选择单元格大小的情况下),因为找出对象跨越哪些单元格将是一个 O(1) 操作。