然而在实际运动过程中,不可避免的会受到空气阻力的影响。其实,空气阻力的变化很复杂,速度不大时与速度成正比;速度较大时与速度的平方成正比;速度再大就与速度的立方甚至五次方成正比。 今天我们重点研究阻力与速度成正比的情形。 题目: 质量为 解答: 根据受力情况,画出受力示意图,如下图所示。 列出牛顿运动定律方程,即矢量关系为 设定沿 将 改写为 对上式两边积分,即 求得 可见由于空气阻力的存在, 由于 即 当 求得 同理,由于 即 当 求得 可见 由于 即 当 求得 联立(3)、(4)两式,消去 以上就是我们今天需要求解的结果。 下面,我们继续对(5)式进行分析。根据高等数学中泰勒展开公式 我们对(5)式中 我们取前面两项,得 将(6)式代入(5)式中,可以得到 大家有没有发现(7)式与我们前面在利用编程解决生活中物理问题(五)中推导的在忽略空气阻力情况下的轨迹方程一样哈~~~ 接下来我们通过Python编程,分别将小球在不受空气阻力影响与受空气阻力影响的运动过程展示出来,从而加深对抛体运动的理解。 详细代码如下: from vpython import *
scene = canvas(width=1520, height=400,center=vector(20,0,0), background=color.white) #设定背景 label(pos= vector(60, -8, 0), text = '寒江钓雪',height=20,color = color.black,box=False,opacity=0)
#绘制x轴 x_axis = arrow(pos=vector(0,0,0), axis=vector(50,0,0), shaftwidth=0.1, headwidth=0.5,color=color.black)
#绘制y轴 y_axis = arrow(pos=vector(0,0,0), axis=vector(0,20,0), shaftwidth=0.1, headwidth=0.3,headlength =1.4,color=color.black)
#标出原点O,x,y origin_label = label(pos= vector(-1, -1, 0), text = 'O',height=25,color = color.black,linecolor=color.white,box=False,opacity=0) x_label = label(pos= vector(x_axis.pos.x+x_axis.axis.x, -1, 0), text = 'x',height=20,color = color.black,linecolor=color.white,box=False,opacity=0) y_label = label(pos= vector(-1, y_axis.pos.y+y_axis.axis.y,0), text = 'y',height=20,color = color.black,linecolor=color.white,box=False,opacity=0)
label(pos= vector(x_axis.pos.x+x_axis.axis.x, y_axis.axis.y-3, 0), text = '蓝色小球不受空气阻力影响',height=18,color = color.blue,linecolor=color.white,box=False,opacity=0) label(pos= vector(x_axis.pos.x+x_axis.axis.x, y_axis.axis.y-6, 0), text = '红色小球受空气阻力影响',height=18,color = color.red,linecolor=color.white,box=False,opacity=0)
#定义蓝色小球1,不受空气阻力影响 ball1 = sphere(pos=vector(0,0,0),radius=0.4,color=color.blue,make_trail=1) #定义红色小球2,受空气阻力影响 ball2 = sphere(pos=vector(0,0,0),radius=0.4,color=color.red,make_trail=1)
#设置重力加速度 g=vector(0,-9.8,0) #设置小球的初速度与水平方向的夹角 theta = 45 #将角度转换为弧度 theta_rad = radians(theta)
#设置小球的质量 m=1 #设置空气阻力系数 k=0.2
#设置小球的初速度大小 v = 20 #定义小球的初始速度 ball1.v = v*vector(cos(theta_rad),sin(theta_rad),0) ball2.v = v*vector(cos(theta_rad),sin(theta_rad),0)
#定义小球1的加速度 ball1.a = g
#求出小球2的加速度 ball2.a = g+(-k)*ball2.v/m
#定义小球1速度矢量箭头 vector_v1 = arrow(pos = vector(0,0,0),axis =vector(0,0,0), color=color.blue,shaftwidth = 0.1,headwidth=0.6) v1_label = label(pos=vector_v1.pos+vector_v1.axis, text='v', height=20, color=color.blue, linecolor=color.white, box=False, opacity=0)
#定义小球2速度矢量箭头 vector_v2 = arrow(pos = vector(0,0,0),axis =vector(0,0,0), color=color.red,shaftwidth = 0.1,headwidth=0.6) v2_label = label(pos=vector_v2.pos+vector_v2.axis, text='v', height=20, color=color.red, linecolor=color.white, box=False, opacity=0)
#绘制速度随时间变化关系 vgraph=graph(title='小球速度随时间变化关系',width=400, height=280, xtitle='时间/s',ytitle='速度/m/s',align='left', xmin=0, xmax=3, ymin=10, ymax=22)
V1curve=gcurve(color=color.blue,graph=vgraph,label='蓝色小球速度') #绘制蓝色小球速度曲线 V2curve=gcurve(color=color.red,graph=vgraph,label='红色小球速度') #绘制红色小球速度曲线
#绘制x轴位置随时间变化关系 xgraph=graph(title='小球x轴坐标随时间变化关系',width=400, height=280, xtitle='时间/s',ytitle='x/(m)',align='left', xmin=0, xmax=3, ymin=0, ymax=50)
x1curve=gcurve(color=color.blue,graph=xgraph,label='蓝色小球x轴坐标') #绘制蓝色小球x轴坐标 x2curve=gcurve(color=color.red,graph=xgraph,label='红色小球x轴坐标') #绘制红色小球x轴坐标
#绘制y轴位置随时间变化关系 ygraph=graph(title='小球y轴坐标随时间变化关系',width=400, height=280, xtitle='时间/s',ytitle='y/(m)',align='left', xmin=0, xmax=3, ymin=0, ymax=12)
y1curve=gcurve(color=color.blue,graph=ygraph,label='蓝色小球y轴坐标') #绘制蓝色小球y轴坐标 y2curve=gcurve(color=color.red,graph=ygraph,label='红色小球y轴坐标') #绘制红色小球y轴坐标
#设置时间间隔 t=0 dt=0.0001
while True: rate(2000) if ball1.pos.y>=0: ball1.v += ball1.a * dt #速度公式 ball1.pos += ball1.v * dt #位置变化 # 设置小球1的速度矢量 vector_v1.pos = ball1.pos vector_v1.axis = ball1.v * 0.3 v1_label.pos = vector_v1.pos + vector_v1.axis + vector(1, 1, 0) else: ball1.v = vector(0,0,0) #落到地面后速度置为0
if ball2.pos.y >= 0: ball2.v += ball2.a * dt #速度公式 ball2.pos += ball2.v * dt #位置变化 # 设置小球2的速度矢量 vector_v2.pos = ball2.pos vector_v2.axis = ball2.v * 0.3 v2_label.pos = vector_v2.pos + vector_v2.axis + vector(1, 1, 0) else: ball2.v = vector(0,0,0) #落到地面后速度置为0
if ball1.pos.y<0 and ball2.pos.y < 0: break
V1curve.plot(t, mag(ball1.v)) # 绘制小球1速度曲线 x1curve.plot(t, ball1.pos.x) # 绘制小球1x轴坐标 y1curve.plot(t, ball1.pos.y) # 绘制小球1y轴坐标
V2curve.plot(t, mag(ball2.v)) # 绘制小球2速度曲线 x2curve.plot(t, ball2.pos.x) # 绘制小球2x轴坐标 y2curve.plot(t, ball2.pos.y) # 绘制小球2y轴坐标
t += dt 程序运行结果为: ▲横屏观看效果更佳哦~~~ 显然,通过仿真我们可以清晰地看到空气阻力对小球运动的影响。 由于受空气阻力的影响,抛体的轨迹不再是简单的抛物线了,实际轨迹将比理想轨迹向左下方偏离。也就是说,当存在空气阻力时,抛射的距离会变短。 通过本期的讲解,大家一定对抛体运动有了更加深刻地理解。我们通过数学中的微积分推导,求得了在受空气阻力影响的情况下,抛体的轨迹方程。我们也发现学好数学的重要性,正所谓“物理的尽头是数学,数学的尽头是哲学”。 本期内容重点讨论的是空气阻力与速度成正比的情形,后期我们将进一步探讨空气阻力与速度平方成正比的情形。 欢迎大家关注本公众号,我们共同探究学习~ END |
|