继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

球体碰撞之后速度分析

JohnTito
关注TA
已关注
手记 1
粉丝 0
获赞 0
其中particles为数组,用来存放所有球体
mass为质量
Vx,Vy分别为x,y方向速度
原理为动能,动量守恒
缺点:受到运算精度的限制,只有在碰撞瞬间才有效,若是重叠则会发生错误



//遍历所有对象
for (let fir = 0; fir < Particles.length; fir++) {
for (let sec = fir + 1; sec < Particles.length; sec++) {
//水平差值
var dx = Particles[sec].coordinate.x - Particles[fir].coordinate.x;
//垂直差值
var dy = Particles[sec].coordinate.y - Particles[fir].coordinate.y;
//距离平方
var dis2 = Math.pow(dx, 2) + Math.pow(dy, 2);
//距离
var dis = Math.floor(Math.sqrt(dis2))+1;
//沿半径方向速度分量
var v1p = (Particles[fir].velocity.Vy * dy + Particles[fir].velocity.Vx * dx) / dis;
var v2p = (Particles[sec].velocity.Vy * dy + Particles[sec].velocity.Vx * dx) / dis;
//垂直半径方向速度分量
var v1c = (Particles[fir].velocity.Vy * dx + Particles[fir].velocity.Vx * dy) / dis;
var v2c = (Particles[sec].velocity.Vy * dx + Particles[sec].velocity.Vx * dy) / dis;
//碰撞后重新分配的沿半径方向速度分量
var _v1p = ((Particles[fir].mass - Particles[sec].mass) * v1p + 2 * Particles[sec].mass * v2p) / (Particles[fir].mass + Particles[sec].mass);
var _v2p = ((Particles[sec].mass - Particles[fir].mass) * v2p + 2 * Particles[fir].mass * v1p) / (Particles[fir].mass + Particles[sec].mass);
//重新合成的xy速度分量
Particles[fir].velocity.Vy = _v1p * dy / dis + v1c * dx / dis;
Particles[fir].velocity.Vx = _v1p * dx / dis + v1c * dy / dis;
Particles[sec].velocity.Vy = _v2p * dy / dis + v2c * dx / dis;
Particles[sec].velocity.Vx = _v2p * dx / dis + v2c * dy / dis;}

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP