我在三维空间中有很多点(+100,000)。我需要使用最近邻居和范围查询。首先我使用了kdtree(k = 3),但每个点都有一个velocity属性。他们的位置不是静止的,他们改变了他们的位置。问题从这里开始。使用旧位置进行最近邻居和范围查询很容易。但我必须根据它们的速度来计算它们的新位置。我必须找到最近邻居并在计算新位置后搜索范围。
每次积分改变他们的位置我都必须更新kdtree,但成本很高。它减慢了我的速度。您有任何建议或是否有更好的数据结构适用于这种情况?
答案 0 :(得分:2)
八叉树或八度键可以更快。八度键通常使用莫顿曲线或希尔伯特曲线。它减小了尺寸并填补了空间。它经常用于地图应用程序。要在3d中查找方向,灰色代码可以帮助找到正确的象限。这是一个关于移动物体的有趣线程:http://xboxforums.create.msdn.com/forums/p/59841/368276.aspx。它建议使用四叉树,链表或三元树。