最近有点懈怠,已经很久没更新物理题目啦~其实,最近抽空摸索了一下小程序开发,发现小程序开发也挺有意思,大家没事的话,可以扫码识别下面的“小程序码”,顺便帮忙测试一下bug哈~
言归正传,回到我们今天的话题,我们知道高考物理题目中,经常会遇到匀加速直线运动,变加速圆周运动,子弹打入木块共速运动,带电粒子在电场、磁场作用力下的曲线运动等题型,第一眼看到这样的题目我们都会很棘手,其实这就需要我们利用动态思维将整个动态过程分析出来,最终将会迎刃而解~~~感觉说了句废话,哈哈哈~
下面请大家看一道《2023年浙江省高中物理试题》,如下图所示。
解答:
(1)滑块从静止释放到C点运动过程中,只有重力做功,根据动能定理可得:
代入数据,求得:
滑块运动到C点时,如下图所示。
我们对滑块进行受力分析,发现轨道对滑块的支持力
代入数据,求得
(2)设滑块刚滑上摆渡车时的速度大小为
代入数据,求得
摆渡车碰到
假设滑块到达摆渡车右端时刚好与摆渡车共速
代入数据,求得:
根据能量守恒定律可得:
求得:
此过程中对摆渡车利用动能定理可得:
代入数据,求得摆渡车位移为:
所以假设成立,说明摆渡车达到
(3)滑块从
滑块从滑上摆渡车到与摆渡车共速过程,所用时间为
求得,
滑块与摆渡车共速后,滑块与摆渡车一起做匀速直线运动所用时间为:
代入数据,求得:
所以滑块从
滑块滑上平台
以上是全部求解过程。前面几期我们已经通过Matlab软件对生活物理进行了编程,但是最后只是利用Matlab求最终结果,并没有展示中间运动过程,今天我们通过Python语言进行编程,将这道题目“动”起来,希望大家能够直观地解题。
from vpython import *
s1=canvas(width=1520,height=720,background=color.white,center=vector(10,0,0)) #定义画布
label(pos= vector(15, -2.5, 0), text = '寒江钓雪',height=20,color = color.black,linecolor=color.white)
width=0.03
slider_size=0.3 #定义滑块尺寸
h=2.3 #初始高度
theta=37 #斜面角度
FG_length=2.5 #水平直轨道FG长度
GH_length=1 #GH的高度
HI_length=9 #HI的长度
JK_length=5 #JK的长度
R=0.5 #圆形轨道半径
car_length=3 #摆渡车长度
car_height=0.6 #摆渡车高度
car_wheel_radius=(GH_length-car_height)/2 #摆渡车轮子半径
car_distance_front_rear = 1.4 #前后轮之间距离
#创建滑块
slider=box(pos=vector(sqrt(2)/2*slider_size*cos((45-theta) * pi / 180),h+sqrt(2)/2*slider_size*sin((45-theta) * pi / 180),0), axis=vector(h/tan(theta * pi / 180),-h,0), size=vector(slider_size,slider_size,0),color=color.black,mass=1)
#创建斜坡AF
AF=box(pos=vector(h/2/tan(theta * pi / 180),h/2,0), axis=vector(h/tan(theta * pi / 180),-h,0), size=vector(h/sin(theta * pi / 180),width,width),color=color.black)
#创建水平直轨道FG
FG=box(pos=vector(h/tan(theta * pi / 180)+FG_length/2,0,0), axis=vector(1,0,0), size=vector(FG_length,width,width),color=color.black)
#创建GH
GH=box(pos=vector(h/tan(theta * pi / 180)+FG_length,-GH_length/2,0), axis=vector(0,-1,0), size=vector(GH_length,width,width),color=color.black)
#创建HI
HI=box(pos=vector(h/tan(theta * pi / 180)+FG_length+HI_length/2,-GH_length,0), axis=vector(1,0,0), size=vector(HI_length,width,width),color=color.black)
#创建IJ
IJ=box(pos=vector(h/tan(theta * pi / 180)+FG_length+HI_length,-GH_length/2,0), axis=vector(0,1,0), size=vector(GH_length,width,width),color=color.black)
#创建JK
JK=box(pos=vector(h/tan(theta * pi / 180)+FG_length+HI_length+JK_length/2,0,0), axis=vector(1,0,0), size=vector(JK_length,width,width),color=color.black)
#创建圆形轨道
BCDE=ring(pos=vector((h-1.2*R)/tan(theta * pi / 180)+R*sin(theta * pi / 180),1.2*R+R*cos(theta * pi / 180),0),axis=vector(0,0,-1),radius=R,color=color.black, thickness=0.02)
#创建摆渡车
car=box(pos=vector(h/tan(theta * pi / 180)+FG_length+car_length/2,-car_height/2,0), axis=vector(1,0,0), size=vector(car_length,car_height,0),color=color.black, opacity=0.3,mass=1)
#创建后轮
car_rear_wheel = ring(pos=vector(car.pos.x-car_distance_front_rear/2,-car_height-car_wheel_radius,0),axis=vector(0,0,-1),radius=car_wheel_radius,color=color.black, thickness=0.02)
#创建前轮
car_front_wheel = ring(pos=vector(car.pos.x+car_distance_front_rear/2,-car_height-car_wheel_radius,0),axis=vector(0,0,-1),radius=car_wheel_radius,color=color.black, thickness=0.02)
s1.autoscale=0 #禁止画面自动缩放
m2=1 #摆渡车质量
g=vector(0,-10,0) #设置重力加速度
t=0 #设定时间变量
dt=0.00001 #设置时间间隔
slider.v=vector(0,0,0) #设定滑块初始速度矢量,静止释放
slider.a=vector(0,0,0) #设定滑块初始加速度矢量
theta_ring=180 #滑块绕圆环角度
##滑块在斜面AB段运动
while(slider.pos.y -1.2*R > 0.0001):
rate(20000) #设置每秒循环次数
slider.a.x = mag(g) * sin(theta * pi / 180) * cos(theta * pi / 180)
slider.a.y = -mag(g) * sin(theta * pi / 180) ** 2
slider.v += slider.a * dt # 计算滑块速度矢量更新值
slider.pos += slider.v * dt # 计算滑块位置矢量更新值
t=t+dt
##滑块在圆弧BCDE段运动
#设置滑块底部坐标在圆环上
slider.bottom = vector((h-1.2*R)/tan(theta * pi / 180),1.2*R,0)
#slider.v=AF.axis.norm()*sqrt(34)
omega=mag(slider.v)/R
init_BO=BCDE.pos-slider.bottom
while(theta_ring >= 0.01):
rate(20000) # 设置每秒循环次数
BO=BCDE.pos-slider.bottom
an=mag(slider.v)**2/(R)*norm(BO)
at=g-dot(g,an)/mag(an)**2*an
slider.a=an+at
slider.v += slider.a * dt #计算滑块速度矢量更新值
slider.bottom += slider.v * dt #计算滑块底部位置矢量更新值
slider.pos = slider_size/2*norm(BO)+slider.bottom
slider.axis = mag(slider.axis)*norm(at) #调整滑块底面始终与圆弧相切
if(slider.bottom.x < (h-1.2*R)/tan(theta * pi / 180)):
theta_ring = diff_angle(init_BO,BO)*180/pi
t += dt
##滑块在斜面EF段运动
while(slider.pos.y > 0.0001):
rate(20000) #设置每秒循环次数
slider.a.x = mag(g) * sin(theta * pi / 180) * cos(theta * pi / 180)
slider.a.y = -mag(g) * sin(theta * pi / 180) ** 2
slider.v += slider.a * dt # 计算滑块速度矢量更新值
slider.pos += slider.v * dt # 计算滑块位置矢量更新值
t += dt
##滑块在水平面FG段运动
slider.a = 0.2*mag(g)*vector(-1,0,0)
slider.v = mag(slider.v)*vector(1,0,0)
slider.axis = mag(slider.axis)*vector(1,0,0) #调整滑块底面始终与圆弧相切
#slider.pos = vector(h/tan(theta * pi / 180), slider_size / 2, 0)
slider.pos += vector(0, slider_size / 2, 0)
while(h/tan(theta * pi / 180)+FG_length-slider.pos.x > 0.0001):
rate(20000) #设置每秒循环次数
slider.v += slider.a * dt # 计算滑块速度矢量更新值
slider.pos += slider.v * dt # 计算滑块位置矢量更新值
t += dt
# slider.pos = vector(h/tan(theta * pi / 180)+FG_length, slider_size / 2, 0)
# slider.v = 6*vector(1,0,0)
mu=0.3 #滑块与摆渡车之间的动摩擦系数
slider.a = mu*mag(g)*vector(-1,0,0)
car.v=vector(0,0,0) #设定摆渡车初始速度矢量,静止
car.a=-slider.a #设定摆渡车初始加速度矢量
while car.pos.x+car.length/2-(slider.pos.x+ slider_size/2)> 0.01:
#while mag(slider.v)-mag(car.v) > 0.001:
rate(20000) # 设置每秒循环次数
slider.v += slider.a * dt # 计算滑块速度矢量更新值
slider.pos += slider.v * dt # 计算滑块位置矢量更新值
car.v += car.a * dt # 计算摆渡车速度矢量更新值
car.pos += car.v * dt # 计算摆渡车位置矢量更新值
car_rear_wheel.pos.x = car.pos.x - car_distance_front_rear/2
car_front_wheel.pos.x = car.pos.x+car_distance_front_rear/2
t += dt
#滑块与摆渡车共速后,匀速直线运动
slider.v=car.v
while IJ.pos.x-(car.pos.x+car.length/2)> 0.01:
rate(20000) # 设置每秒循环次数
slider.pos += slider.v * dt # 计算滑块位置矢量更新值
car.pos += car.v * dt # 计算摆渡车位置矢量更新值
car_rear_wheel.pos.x = car.pos.x - car_distance_front_rear / 2
car_front_wheel.pos.x = car.pos.x + car_distance_front_rear / 2
t += dt
#滑块滑到平台JK上,做匀速直线运动
while True:
rate(20000) # 设置每秒循环次数
slider.pos += slider.v * dt # 计算滑块位置矢量更新值
t += dt
程序运行结果为:
根据程序运行结果,我们可以直观地看到滑块从滑上摆渡车到与摆渡车共速过程。
是不是很神奇呀,从这一期开始,我们将开始对历年高考物理题目分析,并通过编程让其“动”起来,感谢大家关注哈~
END
联系客服