我遇到的问题是我使用的游戏使用四叉树进行快速接近检测,用于武器射击时的范围检查。我正在使用经典的“4宽”四叉树,这意味着当我尝试将第5个子节点添加到已经完整的父节点时,我会细分。
最初可用目标的集合相当均匀,因此四叉树的效果非常好。由于设计的变化,我们现在在相对较小的空间内聚集了大量的敌人,导致性能问题,因为四叉树变得非常不平衡。
我有两种可能的解决方案,要么修改四叉树来处理这个问题,要么切换到替代表示。
我熟悉的唯一其他表示是空间哈希,对此并不十分熟悉。根据我的理解,这可能会遇到同样的问题,因为群集会在相对较少的散列桶中结束。据我所知,BSP是一种可能的解决方案,可以比四叉树或空间散列更好地处理不均匀分布。
不公平,我知道,现在实际上有三个问题。
我可以对四叉树进行任何修改,例如增加节点的“宽度”有助于解决这个问题吗?
是否值得花些时间考虑空间哈希?
BSP或其他一些数据结构是否可以更好地应对不均衡的分布?
答案 0 :(得分:0)
我通常使用每个节点至少有10个条目的四叉树,但你必须尝试一下。
我没有空间哈希的经验。
您可以研究的其他结构是:
如果您使用的是Java,我可以使用Apache许可版本here (R*Tree)和here (PH-Tree)。