Algorithm 二维空间中对象的高效数据结构
我有一个包含对象的2D空间,每个对象都有坐标向量和相对于其坐标的顶点数组,现在我需要一种有效的存储对象的方法,该存储应该能够添加和删除对象,最重要的部分是碰撞检测: 我想得到一个有机会碰撞(近邻等)的物体列表,应该是快速简单的Algorithm 二维空间中对象的高效数据结构,algorithm,data-structures,2d,complexity-theory,collision-detection,Algorithm,Data Structures,2d,Complexity Theory,Collision Detection,我有一个包含对象的2D空间,每个对象都有坐标向量和相对于其坐标的顶点数组,现在我需要一种有效的存储对象的方法,该存储应该能够添加和删除对象,最重要的部分是碰撞检测: 我想得到一个有机会碰撞(近邻等)的物体列表,应该是快速简单的 O([number of objects with collish chance]*log([number of all objects])这样,当没有接近的对象时,它应该在O(1)中进行操作,而不是在O(n)中对所有对象进行强制操作 询问是否有不清楚的事情 也许你知道一
O([number of objects with collish chance]*log([number of all objects])
这样,当没有接近的对象时,它应该在O(1)
中进行操作,而不是在O(n)
中对所有对象进行强制操作
询问是否有不清楚的事情
也许你知道一些关于这个主题的链接或者一些好主意
谢谢。而且两者都提供高效的2D碰撞检测。您可以使用它们中的一个,也可以只检查它们的源代码。您可以通过使用二进制空间分区来使用树数据结构,下面是一个关于它的示例。据我所知,这是在n维空间中存储物体位置信息的最有效方法 下面是它的工作原理:假设您有以下字段 假设你有一个100x100的空间 这里有6个物体,坐标从A到F A(25,25) B(25,75), C(25,85), D(75,75), E(90,60) 现在,我们将空间划分为4个部分,每个部分都是树中根节点的子节点。左上角仅包含点A,因此这是一个带有一个叶节点的chield。 左下角包含两个对象,B和C,因此它们将是第二个chield的叶节点。
现在右下角将有3个元素,这是我们不想要的,因为二叉树的概念,所以我们进行另一个细分。通过递归地执行此操作,您可以获得一个非常有效的数据结构,用于在二维空间中查找对象。您可以使用a来检查所有附近的对象。您希望使用空间索引或四叉树。四叉树可以是简单的空间填充曲线(sfc)或希尔伯特曲线。sfc将2d复杂度降低为1d复杂度,并用于许多贴图应用程序或热贴图。sfc也可以用来存储zipcode搜索。你想搜索尼克的希尔伯特曲线四叉树空间索引博客