当前位置:首页>python>Python 物理模拟:匀速直线运动

Python 物理模拟:匀速直线运动

  • 2026-10-11 07:41:40
Python 物理模拟:匀速直线运动

Python 物理模拟:匀速直线运动

引言

今天和大家分享一个使用 VPython 模拟匀速直线运动的入门程序。这个程序虽然简单,相当于“Hello world!”,它却包含了物理模拟的基本框架,非常适合初学者学习。我一直有一个想法,就是把各种难懂的物理过程,包括各种高考或者物理竞赛的模型,可以用这种直观的方法模拟出来,毕竟物理是实验学科,而可视化的模拟实验可以大大减少实验成本(尽管更好的做法是直接实验验证),也使得物理学习更加有趣和直观。

VPython 是一款专为教学和科研设计的 3D 可视化 Python 库,简单易用,非常适合物理模拟。接下来,我会经常用到它。后面我也会介绍其它的python库,这些工具对于理解物理和物理教学都有很大的帮助,希望我也能坚持下去,争取将整个物理学都形象地模拟一遍。现在AI辅助调试程序,可以使我大大节约程序调试和编写的时间成本,这也是我开始这个公众号的原因,现在AI可以大大降低编程难度,之前我写到一半卡在那里的程序,也得以调试成功正确运行了,相信AI也能帮到大家。


一、物理原理

匀速直线运动

匀速直线运动是最简单的机械运动形式,其特点是:

  • • 物体沿直线运动
  • • 速度大小和方向保持不变
  • • 加速度为零

核心公式

x(t) = x₀ + v × t
符号
含义
单位
x(t)
t 时刻的位置
m
x₀
初始位置
m
v
速度
m/s
t
时间
s

二、程序代码

"""匀速直线运动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. 参数设定

参数
值
说明
size
0.1
木块边长 (m)
L
2
地板长度 (m)
v
0.03
木块速度 (m/s)
dt
0.01
时间步长 (s)

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:手动更新位置(而非物理引擎)
  • • xt.plot():实时绘制位移-时间曲线

四、运行结果

计算验证

项目
计算
结果
初始位置 x₀
-0.5L + 0.5×size
-0.95 m
终止位置
0.5L - 0.5×size
0.95 m
位移 Δx
1.9 m
速度 v
0.03 m/s
时间 tΔx / v63.3 s

可视化效果

程序运行后会显示:

  1. 1. 3D 场景:红色木块在蓝色地板上从左向右移动
  2. 2. x-t 图:显示位移随时间线性增长(直线)
  3. 3. v-t 图:显示速度保持恒定(水平线)

五、VPython 入门技巧

1. 视角控制

运行时可用鼠标操作:

2. 常用对象

对象
用途
sphere()
球体
box()
立方体
cylinder()
圆柱体
arrow()
箭头
curve()
曲线
graph()
2D 图形

3. 常用属性

obj.pos      # 位置obj.color    # 颜色obj.size     # 尺寸obj.axis     # 轴向

六、扩展练习

学完这个程序后,你可以尝试:

  1. 1. 改变初始条件:修改速度 v 或地板长度 L
  2. 2. 添加箭头:显示速度矢量
  3. 3. 双向运动:让木块弹回
  4. 4. 添加障碍物:设置多个障碍点

总结

这个程序虽然简单,但展示了物理模拟的基本流程:

设定参数 → 创建对象 → 循环更新 → 绘制数据

掌握了这些基础,你就可以开始模拟更复杂的物理现象了!


关注公众号,将来一定可以获取更多 Python 物理模拟教程!


作者:顾振兴日期:2026年5月27日

最新文章

随机文章