打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
利用编程让高考物理“动”起来~

最近有点懈怠,已经很久没更新物理题目啦~其实,最近抽空摸索了一下小程序开发,发现小程序开发也挺有意思,大家没事的话,可以扫码识别下面的“小程序码”,顺便帮忙测试一下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.03slider_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)#创建斜坡AFAF=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)#创建水平直轨道FGFG=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)#创建GHGH=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)#创建HIHI=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)#创建IJIJ=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)#创建JKJK=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.vwhile 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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Matlab图形绘制经典案例
UNITY2d检测方法OverlapCircle与Raycast详解 | 航行学园
matlab实用函数及技巧整理
Matlab绘图-很详细,很全面
循环链表(c实现)
刚体在三维空间的旋转(关于旋转矩阵、DCM、旋转向量、四元数、欧拉角)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服