标签: python algorithm loops collision-detection
我对碰撞检测算法一无所知,但出于教育目的,我正在尝试在Python粒子系统中处理碰撞。
我现在检测碰撞的方式似乎效率很低。可能是最慢的算法:
p
使用上述方法,当粒子数较高而FPS较低时,我的某些粒子甚至无法检测到碰撞。在我当前的方法中是否有办法防止这种情况发生,或者我将不得不实现另一个更有效的方法(这可能是可行的方法)?
答案 0 :(得分:1)
提高效率的常用技术是将所有对象放入某种空间分区数据结构中,以将对的数量限制为接近O(n)而不是O(n ^ 2)的大小,这就是您所需要的现在。四叉树和k-d树是两个候选对象。这些树中的节点代表空间区域。仅需要检查包含在同一区域中或相交于同一区域的成对对象。
为避免遗漏碰撞,比较点是不够的。而是检查每个粒子从先前位置到当前位置的线段的交点。因此,您需要一个“边缘” quadtree或kd-tree。
要考虑的另一件事是是构建一个空间分区并在帧之间更新它,还是为每个帧从头开始重建分区。前者要复杂得多,可能无法提高速度。先尝试后者。