二维小球完全弹性碰撞绝对坐标速度计算公式

以上是动量守恒定律和能量守恒定理的表述

但是会发现3个恒等式没办法求出4个未知量(代表的是球1碰撞后更新的速度的x方向的分量,右上角的1可以看作是撇)

这是因为没考虑到他们是球体碰撞。动量的变化量一定是沿着球心连接线的方向,而这个方向一定与两个球的相对位置有关。因此可以再加一个表达式:

此处(x1,y1)(x2,y2)是两个小球的球心坐标

因此可以得到:

算出第一个,其余方向的速度就可以全部算出。

PS:结果的推导本人自己算过,从程序运行来看效果还可以,但不保证推导结果正确。毕竟只算了两次,第一次还算错了。还有投影速度方向来计算的公式,这种比较多,且很多经过验证,建议可以使用这类公式。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要进行三维空间小球弹性碰撞的仿真,可以使用MATLAB中的Simulink模块,结合SimMechanics工具箱进行建模和仿真。以下是一个简单的示例模型,演示了两个小球弹性碰撞过程: 1. 首先,在Simulink中创建一个新模型,添加SimMechanics工具箱。 2. 在模型中添加两个Sphere模块,分别代表两个小球。设置小球的质量、半径、初始位置和初始速度等属性。 3. 添加一个Rigid Transform模块,代表小球之间的碰撞。设置碰撞的几何形状和碰撞后的弹性变形等属性。 4. 添加一个Solver Configuration模块,设置仿真的时间步长和仿真时间范围等属性。 5. 连接各个模块,并运行仿真。 以下是示例模型的MATLAB代码: ```matlab clear all; clc; %% 定义小球的属性 m1 = 0.1; % 质量 r1 = 0.05; % 半径 p1_0 = [0;0;0]; % 初始位置 v1_0 = [0;0;0]; % 初始速度 m2 = 0.2; r2 = 0.1; p2_0 = [0.2;0;0]; v2_0 = [-1;0;0]; %% 建立仿真模型 model = 'ball_collision_sim'; open_system(model); set_param(model,'StopTime','1'); % 创建Sphere1模块 add_block('simmechanics/Sources/Sphere','ball_collision_sim/Sphere1'); set_param('ball_collision_sim/Sphere1','radius',num2str(r1)); set_param('ball_collision_sim/Sphere1','mass',num2str(m1)); set_param('ball_collision_sim/Sphere1','initialposition',mat2str(p1_0)); set_param('ball_collision_sim/Sphere1','initialvelocity',mat2str(v1_0)); % 创建Sphere2模块 add_block('simmechanics/Sources/Sphere','ball_collision_sim/Sphere2'); set_param('ball_collision_sim/Sphere2','radius',num2str(r2)); set_param('ball_collision_sim/Sphere2','mass',num2str(m2)); set_param('ball_collision_sim/Sphere2','initialposition',mat2str(p2_0)); set_param('ball_collision_sim/Sphere2','initialvelocity',mat2str(v2_0)); % 创建Rigid Transform模块 add_block('simmechanics/Blocks/Rigid Transform','ball_collision_sim/Rigid Transform'); set_param('ball_collision_sim/Rigid Transform','CollisionType','Ellipsoid'); set_param('ball_collision_sim/Rigid Transform','EllipsoidSize',mat2str([r1*2 r1*2 r1*2])); set_param('ball_collision_sim/Rigid Transform','CoefRestitution','0.8'); % 连接模块 add_line('ball_collision_sim','Sphere1/P1','Rigid Transform/P1'); add_line('ball_collision_sim','Sphere2/P1','Rigid Transform/P2'); % 设置仿真参数 set_param(model,'Solver','ode45','FixedStep','0.001'); %% 运行仿真 sim(model); ``` 运行该代码后,可以在Simulink模型中观察两个小球弹性碰撞过程,并可以通过绘图工具查看小球在三维空间中的运动轨迹。你可以根据自己的需求修改小球的属性和碰撞的几何形状,进行更加复杂的模拟。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值