【问题标题】:Particles passing through each other粒子相互穿过
【发布时间】:2017-10-26 17:00:11
【问题描述】:

我正在编写代码来模拟粒子运动。 (目前 2D 很快 3D 希望) 问题是,如果我使用相对较大的时间步长,粒子最终会相互穿过。

您有什么建议可以让我在不使用非常小的步骤的情况下纠正它吗? (如果有很大的不同,它是在 C++ 中)。

【问题讨论】:

  • 请考虑添加您的代码以查看最佳方法。

标签: optimization simulation collision particles


【解决方案1】:

use of timestep to advance the clock introduces model artifacts 会破坏模型的有效性,就像您的情况一样。请改用离散事件调度。这个paper from Winter Simulation Conference 2005 描述了如何在离散事件框架中实现移动。您的模型不仅会更准确,而且可能会运行得更快。

【讨论】:

  • 感谢您的建议,我会知道实施它,看看费用是否超过成本:-)
【解决方案2】:

所以你必须做某种collision detection 来查看两个对象是否会发生碰撞。

根据您的数据结构,检测可能采用多种形式。如果您只有一个点列表,则必须在 N^2 中为粒子的每一步检查所有点(添加运动矢量以创建更大的空间足迹)。这可以通过GJK 算法来完成。

使用一些空间数据结构可以通过仅在一组修剪过的粒子上运行 GJK 来降低复杂性,即无需检查它们是否不可能重叠。

【讨论】:

  • 感谢您的建议,我会知道实施它,看看费用是否超过成本:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-10
  • 2012-05-15
相关资源
最近更新 更多