如何提高游戏物理嵌套 for 循环的速度
How to improve the speed of a nested for loop for game physics
我正在用 python 制作游戏(特别是使用 pygame 进行渲染),在我的物理引擎中我遇到了 O(n^2) 问题。
在我的引擎对象中:
def step():
for obj1 in self.objects:
for obj2 in self.objects:
if obj1.XY != obj2.XY: # You can't have the object bounce itself
obj1,obj2 = Collision(obj1,obj2)
每次游戏循环运行时都会发生这些循环
当有 100 多个对象(总迭代次数为 10000 次)时,嵌套的 for 循环确实会降低 fps。
我想知道是否有更快的方法来遍历所有可能的组合并将函数应用于该对
解决这个问题的方法是使用更智能的数据结构,这样您的算法就不再是二次方的。
研究一般的 space 分区,特别是四叉树 (https://en.wikipedia.org/wiki/Quadtree) (if you're doing 2D -- the 3D equivalent is the octree: https://en.wikipedia.org/wiki/Octree)。
我正在用 python 制作游戏(特别是使用 pygame 进行渲染),在我的物理引擎中我遇到了 O(n^2) 问题。 在我的引擎对象中:
def step():
for obj1 in self.objects:
for obj2 in self.objects:
if obj1.XY != obj2.XY: # You can't have the object bounce itself
obj1,obj2 = Collision(obj1,obj2)
每次游戏循环运行时都会发生这些循环 当有 100 多个对象(总迭代次数为 10000 次)时,嵌套的 for 循环确实会降低 fps。 我想知道是否有更快的方法来遍历所有可能的组合并将函数应用于该对
解决这个问题的方法是使用更智能的数据结构,这样您的算法就不再是二次方的。
研究一般的 space 分区,特别是四叉树 (https://en.wikipedia.org/wiki/Quadtree) (if you're doing 2D -- the 3D equivalent is the octree: https://en.wikipedia.org/wiki/Octree)。