该算法适合常见的二维完全弹性碰撞的场合,支持对心碰撞(正碰)和非对心碰撞(斜碰),不考虑碰撞过程中的机械能损耗,不考虑物体表面摩擦以及恢复系数。
/*
* this是自身对象,sp是碰撞的对象
* this.m 质量
* this.r 半径
* this.vx 水平速度
* this.vy 竖直速度
* 为了便于理解,代码未经优化!
*/
collide(sp) {
if (this.isCollideWith(sp)) {
// 利用弹性碰撞公式计算水平、竖直方向上的速度分量 let vx = this.vx let vy = this.vy this.vx = ((this.m - sp.m) *