Python 物理模拟:匀速直线运动
引言
今天和大家分享一个使用 VPython 模拟匀速直线运动的入门程序。这个程序虽然简单,相当于“Hello world!”,它却包含了物理模拟的基本框架,非常适合初学者学习。我一直有一个想法,就是把各种难懂的物理过程,包括各种高考或者物理竞赛的模型,可以用这种直观的方法模拟出来,毕竟物理是实验学科,而可视化的模拟实验可以大大减少实验成本(尽管更好的做法是直接实验验证),也使得物理学习更加有趣和直观。
VPython 是一款专为教学和科研设计的 3D 可视化 Python 库,简单易用,非常适合物理模拟。接下来,我会经常用到它。后面我也会介绍其它的python库,这些工具对于理解物理和物理教学都有很大的帮助,希望我也能坚持下去,争取将整个物理学都形象地模拟一遍。现在AI辅助调试程序,可以使我大大节约程序调试和编写的时间成本,这也是我开始这个公众号的原因,现在AI可以大大降低编程难度,之前我写到一半卡在那里的程序,也得以调试成功正确运行了,相信AI也能帮到大家。
一、物理原理
匀速直线运动
匀速直线运动是最简单的机械运动形式,其特点是:
核心公式
x(t) = x₀ + v × t
二、程序代码
"""匀速直线运动2026/5/27written by 顾振兴"""from vpython import * # 引入VPython库# ========== 1. 参数设定 ==========size = 0.1# 木块边长 (m)L = 2# 地板长度 (m)v = 0.03# 木块速度 (m/s)t = 0# 时间 (s)dt = 0.01# 时间间隔 (s)# ========== 2. 画面设定 ==========scene = canvas( title="匀速直线运动", width=800, height=600, background=color.white)scene.camera.pos = vec(0, 2, 3) # 相机位置scene.camera.axis = vec(0, -2, -3) # 相机朝向scene.range = 1.2# 视野范围# 创建地板和木块floor = box( pos=vec(0, 0, 0), size=vec(L, 0.1*size, 0.5*L), color=color.blue)cube = box( pos=vec(-0.5*L + 0.5*size, 0.55*size, 0), size=vec(size, size, size), color=color.red, v=vec(v, 0, 0))# 创建图形窗口gd = graph(title="x-t 图", xtitle="t(s)", ytitle="x(m)")gd2 = graph(title="v-t 图", xtitle="t(s)", ytitle="v(m/s)")xt = gcurve(graph=gd, color=color.red)vt = gcurve(graph=gd2, color=color.red)# ========== 3. 运动循环 ==========while cube.pos.x <= 0.5*L - 0.5*size: rate(1000) # 每秒执行1000次 cube.pos.x += v * dt # 更新位置 xt.plot(pos=(t, cube.pos.x)) # 绘制x-t曲线 vt.plot(pos=(t, cube.v.x)) # 绘制v-t曲线 t += dtprint("t =", t)
三、代码解析
1. 参数设定
2. 3D 场景设置
scene.camera.pos = vec(0, 2, 3) # 相机位置scene.camera.axis = vec(0, -2, -3) # 相机朝向
视角示意图:
camera.pos (0, 2, 3) ↓ ↘ ↘ ↘ camera.axis ↘↓ → → → → → →→ origin (0, 0, 0)
3. 运动循环
while cube.pos.x <= 0.5*L - 0.5*size: rate(1000) # 控制帧率 cube.pos.x += v * dt # 位置更新 xt.plot(pos=(t, cube.pos.x)) # 绘制数据
关键点:
- •
rate(1000):每秒执行 1000 次循环 - •
cube.pos.x += v * dt:手动更新位置(而非物理引擎)
四、运行结果
计算验证
可视化效果
程序运行后会显示:
- 1. 3D 场景:红色木块在蓝色地板上从左向右移动
五、VPython 入门技巧
1. 视角控制
运行时可用鼠标操作:
2. 常用对象
| |
sphere() | |
box() | |
cylinder() | |
arrow() | |
curve() | |
graph() | |
3. 常用属性
obj.pos # 位置obj.color # 颜色obj.size # 尺寸obj.axis # 轴向
六、扩展练习
学完这个程序后,你可以尝试:
总结
这个程序虽然简单,但展示了物理模拟的基本流程:
设定参数 → 创建对象 → 循环更新 → 绘制数据
掌握了这些基础,你就可以开始模拟更复杂的物理现象了!
关注公众号,将来一定可以获取更多 Python 物理模拟教程!
作者:顾振兴日期:2026年5月27日