我在HTML5画布中运行一个简单的草图,使用Processing.js创建“球”对象,这些对象只是具有位置,速度和加速度矢量以及直径的椭圆。在draw函数中,我调用了一个名为applyPhysics()的函数,该函数遍历散列映射中的每个球,并相互检查它们以查看它们的位置是否会使它们崩溃。如果他们这样做,他们的速度矢量就会反转。
长话短说,现在的计算次数是(球的数量)^ 2当我进入数百个球时最终会变得很多。使用这种检查会使草图减慢太多,所以我正在寻找以其他方式进行智能碰撞的方法。
有什么建议吗?不知怎的,可能会使用PGraphics?
答案 0 :(得分:1)
我认为你已经通过将椭圆视为圆圈来简化物理学。
除此之外,请查看四叉树碰撞检测:
我不知道您的项目,但如果球上施加了非随机力(例如重力),您也可以使用预测分析。
答案 1 :(得分:0)
如果您对空间进行网格化并创建反映此空间的数据结构(例如,每个包含一个列对象数组的行对象数组,每个列对象都包含一个球对象的ArrayList),您可以只考虑每个单元格内的交互(或者与邻近的细胞)。您可以为跨越边界的球重新分配数据位置。然后,您的互动次数会少得多。