四叉树性能问题



我的问题是,我开发的一款游戏使用四叉树进行快速接近检测,用于武器射击时的距离检查。我使用的是经典的"4宽"四叉树,这意味着当我试图将第5个子节点添加到已经完整的父节点时,我会进行细分。

最初,一组可用的目标分布得相当均匀,因此四叉树运行得非常好。由于设计的变化,我们现在在相对较小的空间内获得大量敌人的集群,这导致了性能问题,因为四叉树变得明显不平衡。

我想到了两种可能的解决方案,要么修改四叉树来处理这个问题,要么切换到另一种表示方式。

我唯一熟悉的另一种表示是空间散列,对此我并不太熟悉。据我所知,这可能会遇到同样的问题,因为集群最终会包含相对较少的哈希桶。据我所知,BSP是一种可能的解决方案,它将比四叉树或空间哈希更好地处理不均匀分布。

不公平,我知道,实际上现在有三个问题。

  1. 我可以对四叉树进行任何修改吗,例如增加节点的"宽度",这将有助于解决这个问题?

  2. 我花时间考虑一个空间散列值吗?

  3. BSP或其他数据结构是处理不均匀分布的更好选择吗?

我通常使用每个节点至少有10个条目的四叉树,但您必须尝试一下。

我没有空间哈希的经验。

你可以研究的其他结构有:

  • KD树:它们实现起来很简单,也很适合邻居搜索,但使用字符串聚类会变得更慢。它们更新有点慢,可能会变得不平衡
  • R*Tree:更复杂,非常适合邻居搜索,但更新速度甚至比KD Trees慢。它们不会因为自动再平衡而变得不平衡。大部分情况下,重新平衡很快,但在极端情况下,它偶尔会进一步减慢速度
  • PH树:实现起来相当复杂。好邻居搜索。具有非常好的更新速度(如四叉树),最大深度受坐标的位宽限制(通常为32或64位),因此它们不会真正变得不平衡。可以很好地扩展大型数据集(100万及以上),我对小型数据集几乎没有经验

如果您使用的是Java,我在这里(R*Tree)和这里(PH-Tree)都有Apache许可版本。

相关内容

  • 没有找到相关文章

最新更新