粒子相互穿过
Particles passing through each other
我正在编写代码来模拟粒子运动。 (目前 2D 很快 3D 希望)
问题是,如果我使用相对较大的时间步长,粒子最终会相互穿过。
你有什么建议可以让我在不使用非常小的步骤的情况下更正它吗?
(如果这有很大的不同,它是在 C++ 中)。
所以你将不得不做一些collision detection来查看两个物体是否会发生碰撞。
根据您的数据结构,检测可以采用多种形式。如果您只有一个点列表,则必须在 N^2 中针对粒子的每个步骤相互检查所有点(添加运动矢量以创建更大的空间足迹)。这可以通过 GJK 算法来完成。
使用一些空间数据结构可以通过 运行 一组修剪后的粒子上的 GJK 来降低复杂性,即无需检查它们是否不可能重叠。
use of timestep to advance the clock introduces model artifacts which can destroy the model validity, as is happening in your case. Use discrete event scheduling instead. This paper from Winter Simulation Conference 2005描述了如何在离散事件框架中实现运动。您的模型不仅会更准确,而且可能 运行 也会更快。
我正在编写代码来模拟粒子运动。 (目前 2D 很快 3D 希望) 问题是,如果我使用相对较大的时间步长,粒子最终会相互穿过。
你有什么建议可以让我在不使用非常小的步骤的情况下更正它吗? (如果这有很大的不同,它是在 C++ 中)。
所以你将不得不做一些collision detection来查看两个物体是否会发生碰撞。
根据您的数据结构,检测可以采用多种形式。如果您只有一个点列表,则必须在 N^2 中针对粒子的每个步骤相互检查所有点(添加运动矢量以创建更大的空间足迹)。这可以通过 GJK 算法来完成。
使用一些空间数据结构可以通过 运行 一组修剪后的粒子上的 GJK 来降低复杂性,即无需检查它们是否不可能重叠。
use of timestep to advance the clock introduces model artifacts which can destroy the model validity, as is happening in your case. Use discrete event scheduling instead. This paper from Winter Simulation Conference 2005描述了如何在离散事件框架中实现运动。您的模型不仅会更准确,而且可能 运行 也会更快。