Data structures 在二维环境中检测动态对象之间的碰撞

Data structures 在二维环境中检测动态对象之间的碰撞,data-structures,2d,collision-detection,quadtree,Data Structures,2d,Collision Detection,Quadtree,假设我们在二维世界中有很多动态对象,例如角色、投射物、电源,以及游戏中常见的东西。他们都在搬家。我们想检测它们之间的碰撞。做这件事的好方法是什么 我已经看过四叉树了,但是为了检测动态移动对象之间的碰撞,我必须在每一帧重新创建四叉树(因为对象随着每一帧的变化而改变位置)。这看起来是一项耗资巨大的行动 除了四叉树,还有其他方法解决这个问题吗?有没有办法改进四叉树方法?也许在每一帧上重新创建树的成本并没有那么高?通常,您会更新四叉树(而不是丢弃旧的四叉树并构建新的四叉树),这并不像您想象的那样昂贵:通

假设我们在二维世界中有很多动态对象,例如角色、投射物、电源,以及游戏中常见的东西。他们都在搬家。我们想检测它们之间的碰撞。做这件事的好方法是什么

我已经看过四叉树了,但是为了检测动态移动对象之间的碰撞,我必须在每一帧重新创建四叉树(因为对象随着每一帧的变化而改变位置)。这看起来是一项耗资巨大的行动


除了四叉树,还有其他方法解决这个问题吗?有没有办法改进四叉树方法?也许在每一帧上重新创建树的成本并没有那么高?

通常,您会更新四叉树(而不是丢弃旧的四叉树并构建新的四叉树),这并不像您想象的那样昂贵:通常,对象在每一帧中只移动一小段距离,因此,大多数保持在四叉树的同一个节点上,几乎没有变化。即使在最坏的情况下,每个项目都要跨越一个主要边界,并且必须移除和重新插入,成本也只有O(n logn)。但是几乎所有项目上的任何循环都会花费这么多,所以多循环一次也没什么大不了的。

通常,您会更新四叉树(而不是扔掉旧的四叉树并构建一个新的四叉树),这并不像您想象的那样昂贵:通常情况下,对象在每帧中只移动一小段距离,因此,大多数保持在四叉树的同一个节点上,几乎没有变化。即使在最坏的情况下,每个项目都要跨越一个主要边界,并且必须移除和重新插入,成本也只有O(n logn)。但在所有项目上或多或少的任何循环都会花费这么多,所以多循环一次也没什么大不了。

如果四元体中的所有粒子都比下限慢,则可以在2或3帧后更新该四元体。如果全部停止,即使5帧更新也不错。当某个粒子进入该四元体时,当然这会将布尔值
updateQuad
设置为true。如果四元体中的所有粒子都慢于下限,则可以在2或3帧后更新该四元体。如果全部停止,即使5帧更新也不错。当有东西进入这个四元组时,当然这会将布尔值
updateQuad
设置为true