为了账号安全,请及时绑定邮箱和手机立即绑定

球体碰撞之后速度分析

标签:
Html5
其中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;}

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消