Performance 四叉树性能:方形还是矩形?

Performance 四叉树性能:方形还是矩形?,performance,quadtree,Performance,Quadtree,对于我正在编写的一个游戏,我在非正方形地图上使用四叉树。四叉树用于在给定的最大半径(圆)内查找相邻单位的碰撞检测、要攻击的敌人、最近的基地等 我想知道的是,如果四叉树由矩形而不是正方形组成,是否存在性能问题?在四叉树中将矩形贴图划分为大小相等的矩形,而不是将方形贴图划分为正方形 矩形地图上的方形四叉树:将创建一个四叉树,填充整个地图,但根据地图的方向(水平方向与垂直方向),左侧或底部有空/未使用的区域。这将需要更多的方块来填充(?),并且可能会在搜索过程中对性能产生影响 与矩形地图匹配的矩形四叉

对于我正在编写的一个游戏,我在非正方形地图上使用四叉树。四叉树用于在给定的最大半径(圆)内查找相邻单位的碰撞检测、要攻击的敌人、最近的基地等

我想知道的是,如果四叉树由矩形而不是正方形组成,是否存在性能问题?在四叉树中将矩形贴图划分为大小相等的矩形,而不是将方形贴图划分为正方形

矩形地图上的方形四叉树:将创建一个四叉树,填充整个地图,但根据地图的方向(水平方向与垂直方向),左侧或底部有空/未使用的区域。这将需要更多的方块来填充(?),并且可能会在搜索过程中对性能产生影响

与矩形地图匹配的矩形四叉树:四叉树将完美地填充地图。但是,这样做会影响性能吗?如果我们搜索时使用的是适合正方形而不是矩形的半径,可能会导致搜索速度变慢?此外,宽度和高度都必须存储在每个四叉树节点中,因为它们是非正方形的

问题: 将四叉树转换为正方形更好吗?我认为使用矩形方格树可能还可以,但我不确定

屏幕截图(矩形四叉树)

我确信两种选择都可以。从您的示例来看,您的数据集看起来也很小,只有几十个条目,可能是100个

需要考虑的一些事项:

  • 正如您所提到的:矩形要求x和y具有单独的“长度”。这种影响可能很小,但每增加一位信息都会减慢结构的速度,因为需要将更多的数据移动到CPU或通过CPU
  • 如果要在四叉树中存储(通常)直接位于矩形边框上的对象,则需要小心正确实现四叉树:
    • 插入:在四个四边形的拐角处插入一个项目,该项目插入到哪个位置
    • 查询/查找:与插入相反,在边界上结束的任何搜索可能(不必要地)搜索所有边界Qaudrant,这可能会很昂贵

总之,问题可能不是关于正方形/矩形四叉树,但当数据通常位于象限边界上时,应该小心。

只要可以轻松计算边界,即对象处于特定形状,这并不重要。这对于任何矩形(包括正方形)来说都是微不足道的。这对于圆来说也很容易(但用圆覆盖整个地图并不容易)。对于三角形来说也很可行(图形卡在这方面进行了超级优化)。矩形形状的好处是,您可以轻松地将它们划分为其他矩形,您需要获得
log n
。将有数百个对象。是的,显然象限的边界不重叠,因此添加是可以的。但是,想想看,是的,靠近边界/拐角的点将使如果没有给定半径,他搜索是非最优的。我将添加一个优先队列进行搜索!听起来你同意我的观点,我重复一下,以防万一:小心说“象限不重叠”:如果一个象限有(0,0)到(1,1)和另一个象限(0,1)到(1,2),那么点(0,1)或(0.5,1)位于哪个象限,…?所以象限很容易重叠,除非您总是将其中一个角点坐标指定为“独占”。这很难用浮点值(舍入错误等)正确处理。不用担心,我使用第二个角点作为“独占”,因此毫无疑问元素必须放置在何处:)