物体运动及碰撞是一个非常基础但是很普遍物理过程,在许多场景中都会发生,小到微观世界中研究气体反应的分子碰撞理论,大到宇宙中星体运动及星系演化。不管是游戏领域,机器人领域,还是计算化学领域,都会涉及到物体运动和碰撞过程。
关于小球运动及碰撞的仿真及代码,网站资源非常多,但绝大多数以2维平面上运动及碰撞为主,很少有研究三维的,所以这次分享内容是小球在方盒中运动及碰撞3D仿真。
废话少讲,直入主题吧。
一、前期准备工作(基础物理知识+Matlab知识点)
- 1 运动小球描述
描述运动的小球,我们需要的参数包括:小球的半径,球心的位置,球心速度,球心加速度。当然如果要研究小球的自旋,这里还需要引入旋转轴和角速度这两个参数,在本实例中忽略球体自旋,实际在真实碰撞过程中,如果不是小球正对相撞,会导致小球发生自旋,类似乒乓球上旋和下旋,考虑到问题复杂程度,这里忽略小球自旋过程。
因此在三维下,描述小球参数有:[x, y, z, r, vx, vy, vz, ax, ay, az];忽略小球运动系统受外力影响,则描述小球参数可以简化为:[x, y, z, r, vx, vy, vz]。
- 2 小球运动和碰撞
忽略小球运动系统受外力影响,则小球的运动过程通过微元法可以直接写出运动方程:
位置方程:
速度方程:
小球碰撞过程包含两部分:a.球与边界的碰撞,b.球与球之间碰撞
a.小球与边界的碰撞
下面以z方向上边界和下边界碰撞为例,分析碰撞过程判定条件及碰撞后小球参数演变。
如图所示,如果在某一时刻,小球越界判定条件为:
下面分析碰撞后小球位置,速度等信息演变,如果在某一时刻,小球越过z平面上界,即