体的弹性碰撞
在这个例子中,我们将计算两个物体在撞击时的运动。 该模型考虑了质量和速度,以及弹性,刚度和它们在冲击时增加的模型。
系统描述
该模型由两个块组成,用于模拟具有质量的点体,能够沿着一维轨迹移动。 在这个实验中,轨迹将被认为是直线的。
"传入停止"块负责碰撞,其下限设置为"减去无穷大"(-Inf),从而从侧面 R 没有任何东西限制连接对象在该块中的移动,并且如果对象远离止动器移动,则没有任何东西会阻止它。 在迎面而来的交通中,物体将同步能量传输到停止,停止将其传输到第二个物体。
.png)
上限的位置设置*移动物体在与静止物体碰撞之前必须行进的距离。
为了可视化运动,我们使用"绝对运动传感器",其中一个设置为质量的初始位置等于-1m。
启动计算
让我们在程序控制模式下运行模型:
In [ ]:
engee.open( "$(@__DIR__)/" * "mass_collision_model.engee");
data = engee.run( "mass_collision_model" );
根据获得的数据,我们可以构建图表:
In [ ]:
mass1_P = collect(data["Движение массы 1.p_out"]);
mass1_V = collect(data["Движение массы 1.v_out"]);
mass2_P = collect(data["Движение массы 2.p_out"]);
mass2_V = collect(data["Движение массы 2.v_out"]);
gr()
plot( mass2_P.value, mass2_P.value, c=:red, lw=3, xlabel="尸体的位置,m", ylabel="尸体的位置,m", label="重量2", marker=(:o,8))
plot!( mass1_P.value, mass1_P.value, lw=3, xlabel="尸体的位置,m", ylabel="尸体的位置,m", label="重量1", marker=(:o),
mc = [(v > 0) ? :blue : :lightblue for v in mass1_V.value],
ms = [(v > 0) ? 4 : 3 for v in mass1_V.value])
plot!(guidefont=font(8), legend=:bottomright, title="身体姿势", titlefont=font(11))
Out[0]:
红色标记显示碰撞前第一个身体的运动。
碰撞后,第二个身体开始移动(蓝色标记),第一个改变了移动方向(碰撞相当有弹性,第二个身体是第一个的两倍)。
In [ ]:
plot(mass1_V.time, mass1_V.value, lw=3, xlabel="尸体的位置,m", ylabel="尸体的位置,m", label="重量1", marker=(:o,5))
plot!(mass2_V.time, mass2_V.value, lw=3, xlabel="尸体的位置,m", ylabel="尸体的位置,m", label="重量2", marker=(:o,4))
plot!(guidefont=font(8), legend=:bottomright, title="身体的运动速度", titlefont=font(11))
Out[0]:
如果改变碰撞参数,则可以得到不同的运动模式。
In [ ]:
# 让我们减少冲击的弹性
engee.set_param!("mass_collision_model/Соударение", "k_upper_bound"=>Dict("value" => 1e2, "unit" => "N/m"))
data = engee.run( "mass_collision_model" );
# 让我们返回弹性参数的旧值
engee.set_param!("mass_collision_model/Соударение", "k_upper_bound"=>Dict("value" => 1e6, "unit" => "N/m"))
mass1_P = collect(data["Движение массы 1.p_out"]);
mass1_V = collect(data["Движение массы 1.v_out"]);
mass2_P = collect(data["Движение массы 2.p_out"]);
mass2_V = collect(data["Движение массы 2.v_out"]);
plot( mass2_P.value, mass2_P.value, lw=3, xlabel="尸体的位置,m", ylabel="尸体的位置,m", label="重量2", marker=(:o,8))
plot!( mass1_P.value, mass1_P.value, lw=3, xlabel="尸体的位置,m", ylabel="尸体的位置,m", label="重量1", marker=(:o,4))
plot!(guidefont=font(8), legend=:bottomright, title="身体姿势", titlefont=font(11))
Out[0]:
随着冲击弹性的这个参数,第一个身体继续向同一方向移动,但获得了轻微的滞后。
结论
在一维公式中,可以模拟相当复杂的机械系统,包括空间中物体的自由运动,同时考虑到碰撞,同时为数学模型的每个元素选择最合适的参数。
.png)
.png)
.png)