当前位置:首页>python>Python物理模拟:自由落体运动

Python物理模拟:自由落体运动

  • 2026-10-11 07:40:20
Python物理模拟:自由落体运动

🌙 引言

今天我们进步一点点,利用 VPython 来模拟经典的自由落体运动。通过编程实现物理仿真,不仅能加深我们对物理规律的理解,还能直观地看到物体运动的全过程。


⚡ 自由落体运动的物理原理

什么是自由落体?

自由落体是指物体只在重力作用下从静止开始下落的运动。其核心特点:

特点
说明
加速度恒定
重力加速度 g = 9.8 m/s²(方向向下)
初速度为零
从静止开始下落
运动轨迹
竖直向下的直线运动

运动方程

自由落体的运动方程为:

当物体从高度 h 处自由下落时,落地时间可以通过公式计算:


📝 完整代码实现

""" 自由落体运动 2026/5/28 written by 顾振兴"""from vpython import *# 1. 参数设定, 设置变量及初始值size = 1# 小球半径h = 15# 小球离地高度g = 9.8# 重力加速度 9.8 m/s^2t = 0# 时间dt = 0.001# 时间间隔# 2. 画面设定scene = canvas(title="自由落体运动", width=600, height=500,                x=0, y=0, center=vec(0, h/2, 0),                background=vec(0.9, 0.9, 0.9))floor = box(pos=vec(0, 0, 0), size=vec(40, 0.01, 10), color=color.blue)ball = sphere(pos=vec(0, h, 0), radius=size,               color=color.red, v=vec(0, 0, 0), a=vec(0, -g, 0))# 数据图形窗口gd = graph(title="y-t (蓝色) 和 v-t (红色)", width=600, height=400,            x=0, y=600, xtitle="t(s)", ytitle="y(m) / v(m/s)")yt = gcurve(graph=gd, color=color.blue)  # 位置曲线vt = gcurve(graph=gd, color=color.red)   # 速度曲线# 3. 物体运动部分, 小球触地时停止ball_bottom_y = ball.pos.y - sizefloor_top_y = floor.pos.y + 0.5*floor.size.ywhile ball_bottom_y > floor_top_y:    rate(1000)    ball.v += ball.a * dt    ball.pos += ball.v * dt    yt.plot(pos=(t, ball.pos.y))    vt.plot(pos=(t, ball.v.y))    t += dt    ball_bottom_y = ball.pos.y - sizeprint("落地时间 t =", t)

🔍 代码解析

第一部分:参数设定

size = 1# 小球半径h = 15# 小球离地高度(小球中心初始位置)g = 9.8# 重力加速度t = 0# 初始时间dt = 0.001# 时间步长,越小越精确

第二部分:场景搭建

scene = canvas(title="自由落体运动", ...)  # 创建画布floor = box(...)  # 创建地面ball = sphere(...)  # 创建小球gd = graph(...)  # 创建数据图表

关键知识点:

  • • canvas:VPython 的主画布,用于显示 3D 场景
  • • sphere:球体对象,通过 pos、radius、color 等属性定义
  • • graph:数据图表窗口,用于实时绘制运动曲线

第三部分:运动循环

while ball_bottom_y > floor_top_y:    rate(1000)  # 控制帧率    ball.v += ball.a * dt     # 更新速度    ball.pos += ball.v * dt   # 更新位置    yt.plot(pos=(t, ball.pos.y))  # 绘制位置曲线    vt.plot(pos=(t, ball.v.y))    # 绘制速度曲线    t += dt

数值方法:这里使用的是 欧拉法,这是最简单的数值积分方法。虽然精度有限,但对于简单的物理模拟已经足够。

终止条件

ball_bottom_y = ball.pos.y - sizefloor_top_y = floor.pos.y + 0.5*floor.size.ywhile ball_bottom_y > floor_top_y:

检测小球底部是否触地,确保物理模拟的准确性。


📊 运行效果

预期输出

控制台输出:

落地时间 t =  1.6899999999999247

理论验证:

程序计算结果与理论值高度吻合!

图形输出

运行程序后会看到两个窗口:

  1. 1. 上方窗口:3D 动画场景
    • • 红色小球从高处自由下落
    • • 蓝色地板作为地面参考
  2. 2. 下方窗口:数据图表

💡 拓展知识

欧拉法的优缺点

优点
缺点
实现简单
精度较低
计算速度快
误差会累积
适合简单问题
长时间模拟误差较大

改进建议

如果需要更高精度,可以考虑:


如果你觉得这篇文章对你有帮助,请点赞、在看、转发三连支持一下!🎉


📮 关注我们,获取更多有趣的物理仿真教程!


最新文章

随机文章