我正在考虑使用四叉树对 2D 矩形进行碰撞检测,但当存在所有不同大小时,试图找到矩形接触的每个象限似乎有点过于复杂,甚至计算出每个象限应该有多少个象限深度。
相反,我决定在整个区域上只有一个小网格,并通过对 4 个角中的每个角执行行 = x/单元格宽度、列 = y/单元格高度,然后检查与这些单元格中其他每个对象的碰撞来查找每个对象所在的单元格。我还对其进行了一些优化,以防止它重新检查相同的对象
我用 32x32 网格和 5000 个移动物体针对蛮力方法对其进行了测试,速度提高了约 20 倍,碰撞检查减少了 200 倍。所以我想知道使用四叉树比我的方式有什么优势?真的会快很多吗?
当对象的大小变化很大(由于在单个对象移动时需要更新许多网格单元)或当它们非常小且非常稀疏(这需要大量的网格内存来存储大部分空单元格)时,网格就会出现问题。这些是基于树的分区结构(如四叉树)大放异彩的情况。