【问题标题】:Why I should use QuadTree with Collision Detection为什么我应该使用带有碰撞检测的 QuadTree
【发布时间】:2016-08-19 08:48:26
【问题描述】:

我正在阅读有关 QuadTrees 以及如何使用它们进行更好的碰撞检测的一些内容。但是我不明白为什么 QuadTrees 会给我带来更多的性能。 我正在 2D 游戏中尝试这个。

如果我使用四叉树,我必须在每一帧上清除四叉树并插入我的所有对象,然后循环遍历它以获取所有可能的碰撞对象。然后循环通过它来获得我需要的碰撞对象。 为什么这比遍历我的所有对象更好? 对于 QuadTree,如果我是对的,我需要 O(n logn)。但是遍历我所有对象的循环是 O(n)

问候

【问题讨论】:

  • 虽然这是一个非常酷且引人入胜的问题,但我认为它与 StackOverflow 的主题无关。您可能在gamedev.stackexchange.com 上运气更好。简而言之,QuadTrees 可以帮助限制您需要检查碰撞检测的对象数量,从而提高性能。如果您必须针对场景中的每个对象进行检查,碰撞检测的成本就会很高。 mikechambers.com/blog/2011/03/21/…

标签: javascript collision quadtree


【解决方案1】:

将每个对象与所有其他对象进行比较是 O(n^2),因为您需要遍历所有对象 (O(n)),并且对于每个对象,您需要检查(几乎)所有其他对象,所以这是另一个 O (n),结果为 O(n^2)。

这比 O(n log n) 更糟糕。

如果您只有 5 个左右的对象,那么比较每个对象可能仍然更便宜,因为您避免了创建四叉树的开销。

此外,如果不是所有对象都改变了它们的位置,您也许可以重用四叉树。

【讨论】:

  • 所以如果我只需要检查我的玩家对所有对象,没有四叉树的工作应该更好吗?谢谢你
  • 如果只有一个对象移动,它甚至不需要在四叉树中。四叉树是否更好取决于对象的数量。最好尝试一下。
猜你喜欢
  • 2011-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-07
  • 1970-01-01
  • 2011-09-05
  • 2011-10-18
  • 1970-01-01
相关资源
最近更新 更多