A downloadable tool for Windows

This is a 2D collision simulator using Verlet integration. Chinese and English supported.

这是一个使用 Verlet 方法的 2D 碰撞模拟程序. 它可以模拟小球之间的碰撞, 也支持连接件. 用户可以设置粘性, 胡克系数, 阻尼, 重力场, 引力场等参数. 可以实时创建和删除物体和连接. 有多种可视化模式. 使用了多线程去处理球之间的碰撞.

Verlet 方法的特点主要是在处理碰撞上: 在两个物体发生重叠 (就是碰撞) 的时候, 仅去调整物体的位置, 而物体碰撞后的速度只由调整后的位置和上一时刻的位置决定. 反过来, 之前 "2D 刚体沙盒" 中使用的冲量方法的处理是: 不仅要调整物体位置, 而且还要根据给定的恢复系数计算碰撞后的速度.

相比之前使用冲量方法的刚体模拟程序, 这个程序在堆叠和多个连接的情形表现比较好, 因此更加适合对流体, 珠串等进行模拟. 但这有代价: 程序无法模拟弹性碰撞的情形, 对刚体的支持不好 (只能用实体杆连接球形顶点来代替) 等等.

更加具体一点, 我试验的结果是: 冲量方法下, 穿模距离大概跟堆叠层数的平方成正比; Verlet 方法下, 穿模距离大概只是跟堆叠层数本身成正比. 如果对一般的刚体碰撞 (而非球和实体杆) 采用跟 Verlet 相似的方法处理的话, 会导致静止物体无缘无故晃动起来.

这个程序缺少教程, 你可以参考程序文件内的示例代码, 你也可以参考这里的演示视频链接. 我写这个程序只是出于学习目的, 感兴趣的话非常欢迎在这里留下评论.

我是从 YouTube 博主 Pezzza's Work 这里学到的 Verlet 方法, 他的 YouTube主页: https://www.youtube.com/@PezzzasWork 他的开源代码也非常清晰: https://github.com/johnBuffer

源代码:  https://github.com/ZhangYH2000/Verlet2D231216 一个实机演示视频: https://www.bilibili.com/video/BV1Gg4y1r71Z

Download

Download
2D Verlet 碰撞模拟.zip 126 MB

Leave a comment

Log in with itch.io to leave a comment.