《 VPython 10套新手入门完整可运行源码》

📅 发布时间:2026/8/15 0:56:45
《 VPython 10套新手入门完整可运行源码》 VPython 10套新手入门完整可运行源码全部复制即可运行安装依赖pip install vpython1. 基础弹跳小球力学入门fromvpythonimport*# 场景设置scenecanvas(title弹跳小球,width600,height400)floorbox(posvector(0,-5,0),sizevector(12,0.5,6),colorcolor.gray(0.3))ballsphere(posvector(0,4,0),radius1,colorcolor.red)# 物理参数ball.vvector(0,0,0)gvector(0,-9.8,0)dt0.01whileTrue:rate(100)ball.vg*dt ball.posball.v*dt# 地面碰撞反弹ifball.pos.y-ball.radiusfloor.pos.yfloor.size.y/2:ball.v.y-ball.v.y*0.85# 恢复系数2. 弹簧振子简谐运动fromvpythonimport*scenecanvas(title弹簧振子)wallbox(posvector(-5,0,0),sizevector(0.5,4,4),colorcolor.gray(0.2))blockbox(posvector(2,0,0),sizevector(1.5,1.5,1.5),colorcolor.blue)springhelix(poswall.pos,axisblock.pos-wall.pos,radius0.4,coils12)# 物理参数k15m2block.vvector(1.2,0,0)dt0.01whileTrue:rate(100)spring.axisblock.pos-wall.pos stretchmag(spring.axis)-7F-k*stretch*norm(spring.axis)block.vF/m*dt block.posblock.v*dt3. 单摆仿真fromvpythonimport*scenecanvas(title单摆)pivotsphere(posvector(0,5,0),radius0.2,colorcolor.gray(0.5))bobsphere(posvector(3,0,0),radius0.4,colorcolor.green)rodcylinder(pospivot.pos,axisbob.pos-pivot.pos,radius0.1)Lmag(bob.pos-pivot.pos)bob.vvector(0,0.6,0)g9.8dt0.01whileTrue:rate(100)rod.axisbob.pos-pivot.pos thetaatan2(bob.pos.x,bob.pos.y-pivot.pos.y)a_tan-g*sin(theta)/L bob.v.xa_tan*dt bob.pos.xbob.v.x*dt# 约束摆长rbob.pos-pivot.pos bob.pospivot.posL*norm(r)4. 两球弹性碰撞fromvpythonimport*scenecanvas(title弹性碰撞)ball1sphere(posvector(-3,0,0),radius0.8,colorcolor.orange)ball2sphere(posvector(3,0,0),radius0.8,colorcolor.cyan)m1,m21,1ball1.vvector(2.5,0,0)ball2.vvector(0,0,0)dt0.01whileTrue:rate(100)ball1.posball1.v*dt ball2.posball2.v*dt# 碰撞检测distmag(ball1.pos-ball2.pos)ifdistball1.radiusball2.radius:v1,v2ball1.v.x,ball2.v.x ball1.v.x((m1-m2)*v12*m2*v2)/(m1m2)ball2.v.x((m2-m1)*v22*m1*v1)/(m1m2)5. 点电荷电场可视化fromvpythonimport*scenecanvas(title点电荷电场,backgroundcolor.black)q1sphere(posvector(0,0,0),radius0.3,colorcolor.red)q2sphere(posvector(4,0,0),radius0.3,colorcolor.blue)# 绘制电场箭头k9e9step1forxinrange(-6,7,step):foryinrange(-4,5,step):forzinrange(-2,3,step):posvector(x,y,z)r1pos-q1.pos r2pos-q2.pos E1k*1*norm(r1)/mag(r1)**2E2k*(-1)*norm(r2)/mag(r2)**2EE1E2 arrow(pospos,axisE*0.08,colorcolor.yellow)6. 行星绕恒星轨道开普勒fromvpythonimport*scenecanvas(title行星轨道)starsphere(posvector(0,0,0),radius1.2,colorcolor.yellow,emissiveTrue)planetsphere(posvector(6,0,0),radius0.4,colorcolor.blue,make_trailTrue)G1M_star10planet.vvector(0,1.3,0)dt0.01whileTrue:rate(100)rplanet.pos-star.pos F-G*M_star*1*norm(r)/mag(r)**2planet.vF*dt planet.posplanet.v*dt7. 滑块斜面摩擦fromvpythonimport*scenecanvas(title斜面滑块)# 斜面angleradians(25)slopebox(posvector(3,-1.5,0),sizevector(8,0.3,3),colorcolor.gray(0.4))slope.rotate(angleangle,axisvector(0,0,1),originslope.pos)blockbox(posvector(0,2,0),sizevector(1,1,1),colorcolor.magenta)g9.8mu0.12block.vvector(0,0,0)dt0.01whileTrue:rate(100)# 沿斜面坐标系分解重力sinAsin(angle)cosAcos(angle)a_downg*sinA-mu*g*cosA block.v.xa_down*dt block.pos.xblock.v.x*dt block.pos.yblock.pos.x*tan(angle)0.68. 带电粒子在磁场回旋fromvpythonimport*scenecanvas(title磁场中带电粒子回旋,backgroundcolor.black)# 匀强磁场箭头Bvector(0,0,0.8)forzinrange(-4,5,2):arrow(posvector(0,0,z),axisvector(0,0,1),colorcolor.green,shaftwidth0.1)chargesphere(posvector(-4,0,0),radius0.3,colorcolor.orange,make_trailTrue)q1m0.5charge.vvector(0,2.5,0)dt0.01whileTrue:rate(100)Fq*cross(charge.v,B)charge.vF/m*dt charge.poscharge.v*dt9. 实时数据绘图弹簧能量曲线fromvpythonimport*scenecanvas(title弹簧振子能量)plotgraph(title动能势能,xtitle时间,ytitle能量)Ek_curvegcurve(colorcolor.red,label动能)Ep_curvegcurve(colorcolor.blue,label弹性势能)wallbox(posvector(-5,0,0),sizevector(0.5,3,3))blockbox(posvector(2,0,0),sizevector(1,1,1))springhelix(poswall.pos,axisblock.pos-wall.pos,radius0.3)k12m1block.vvector(1.5,0,0)t0dt0.01whileTrue:rate(100)spring.axisblock.pos-wall.pos stretchmag(spring.axis)-6F-k*stretch*norm(spring.axis)block.vF/m*dt block.posblock.v*dt# 能量计算Ek0.5*m*mag(block.v)**2Ep0.5*k*stretch**2Ek_curve.plot(t,Ek)Ep_curve.plot(t,Ep)tdt10. 3D基础几何体鼠标交互fromvpythonimport*scenecanvas(title基础几何体 鼠标拖拽物体)box(posvector(-3,0,0),sizevector(1.5,1.5,1.5),colorcolor.cyan)sphere(posvector(0,0,0),radius0.8,colorcolor.orange)cylinder(posvector(3,0,0),axisvector(0,2,0),radius0.6,colorcolor.green)cone(posvector(0,-3,0),axisvector(0,1.5,0),radius0.7,colorcolor.magenta)# 鼠标拖拽逻辑drag_objNonedefmouse_down(evt):globaldrag_obj drag_objscene.mouse.pickdefmouse_move(evt):ifdrag_obj:drag_obj.posscene.mouse.posdefmouse_up(evt):globaldrag_obj drag_objNonescene.bind(mousedown,mouse_down)scene.bind(mousemove,mouse_move)scene.bind(mouseup,mouse_up)运行说明安装pip install vpython新建py文件复制任意一段代码直接运行会自动弹出浏览器3D窗口操作鼠标左键拖拽旋转视角滚轮缩放右键平移画面拓展可自行修改质量、重力、电荷、弹簧劲度系数等参数观察变化