二维空间中对象的有效数据结构

| 我有一个带有对象的2D空间,每个对象都有坐标矢量和相对于他的坐标的顶点数组,现在我需要一种高效的对象存储方式,该存储应该能够添加和删除对象,也是最重要的部分是碰撞检测: 我想获得一个有可能碰撞的对象的列表(近邻等),应该快速简单
O([number of objects with collision chance] * log([number of all objects]))
这样,当没有靠近的对象时,应在
O(1)
中进行操作,而不是用蛮力方式仅遍历
O(n)
中的所有对象。 询问是否不清楚。 也许您知道有关该主题的链接或任何好的想法。 谢谢。     
已邀请:
Chipmunk Physics和Box2D均提供有效的2D碰撞检测。您可以使用其中之一,也可以只检查其来源。     
您可以为此使用四叉树来检查所有附近的物体。     
您可以通过使用二进制空间分区来使用树数据结构,这是有关它的维基百科文章。据我所知,这是在n维空间中存储有关对象位置信息的最有效方法。 它是这样工作的:假设您有以下字段 假设您有100x100的空间。 您在其中有6个对象,坐标为A到F A(25,25) B(25,75), C(25,85), D(75,75), E(90,60) 现在,我们将空间分为四个部分,每个部分将是树中根节点的子节点。左上角仅包含点A,因此这是一个叶节点的产量。 左下角包含2个对象B和C,因此它们将成为第二个对象的叶节点。 现在右下角将包含3个元素,由于二叉树的想法,我们不希望使用这3个元素,因此我们进行了另一个细分。通过递归执行此操作,您将获得一个非常有效的数据结构,用于在2D空间中查找对象。     
您要使用空间索引或四叉树。四叉树可以是简单的空间填充曲线(sfc)或希尔伯特曲线。 sfc将2d复杂度降低到1d复杂度,并在许多地图应用程序或热图中使用。 sfc也可以用于存储邮政编码搜索。您要搜索尼克的希尔伯特曲线四叉树空间索引博客。     

要回复问题请先登录注册