我想知道包含不同大小的矩形/正方形作为游戏地图扇区的网格的最佳数据结构是什么。我需要通过简单的xyz坐标访问该网格中的对象。
搜索KdTrees,但他们似乎找到了最近的对象,我发现了段树/间隔树,但关于它们的信息很少 欢呼声。
答案 0 :(得分:0)
您可以使用八叉树。也就是说,您可以从包含整个区域((0,0,0),(x,y,z))的矩形平行六面体开始(它是树的根)。在下一步,将其分成8个长方体(((0,0,0),(x / 2,y / 2,z / 2)),((0,0,z / 2),(x / 2,y / 2,z))等等。这8个长方体是根的孩子。继续为每个树递归构建树。当一个长方体完全位于一个区域内时,递归应该停止(因此它会成为树的一个叶子)。
要回答查询,请从八叉树的根开始,然后去找一个合适的孩子,直到找到一片叶子。
也可以调整k-d树来解决这个问题。这个想法类似于上面描述的那个:将一个空间分成两个半空间,递归地为每个空间构建一个树。递归的基本情况也是一样的:一旦当前子空间只在一个区域内,递归就应该停止。