这是一个基于 Python 的交互式物理实验模拟平台,旨在帮助用户直观地理解经典物理现象。 项目实现了以下三个经典实验的模拟:
- 单摆运动:模拟单摆的周期性运动,支持大角度摆动(数值积分)。
- 自由落体:模拟物体在重力作用下的下落过程,验证能量守恒。
- 抛体运动:模拟抛体在重力和空气阻力作用下的运动轨迹。
项目使用 Streamlit 构建 Web 交互界面,用户可以实时调整实验参数并观察结果。
- 交互式参数调整:实时修改质量、长度、角度、初速度等参数。
- 实时可视化:动态显示运动轨迹和物理量(速度、能量等)的变化曲线。
- 数据导出:支持将模拟数据导出为 CSV 格式,便于进一步分析。
- Web 界面:简洁友好的浏览器界面。
本项目使用 uv 进行依赖管理。请确保已安装 uv。
-
克隆项目
git clone <your-repo-url> cd physics_simulator
-
同步依赖
uv sync
在项目根目录下运行以下命令启动应用:
uv run python main.py或者直接使用 streamlit 运行:
uv run streamlit run src/physics_sim/app.py启动后,浏览器将自动打开模拟器界面(默认地址:http://localhost:8501)。
- 在左侧侧边栏选择要进行的实验(单摆、自由落体、抛体运动)。
- 调整侧边栏中的参数滑块(如长度、质量、角度等)。
- 主界面将实时更新运动轨迹图和物理量图表。
- 点击底部的 "下载 CSV 数据" 按钮保存模拟数据。
调整绳长和初始角度,观察相图(Theta vs Omega)的变化。
开启空气阻力(设置 k > 0),观察轨迹如何偏离理想抛物线。
(此处应包含运行时的截图,例如单摆的轨迹图和抛体运动的界面)
physics_simulator/
├── pyproject.toml # 项目配置和依赖
├── uv.lock # 依赖锁定文件
├── README.md # 项目文档
├── .python-version # Python 版本
├── main.py # 程序入口
├── src/
│ └── physics_sim/
│ ├── __init__.py
│ ├── app.py # Streamlit 界面逻辑
│ └── experiments.py # 物理模型实现
└── tests/ # 测试代码
numpy: 数值计算pandas: 数据处理matplotlib: 绘图scipy: 科学计算streamlit: Web 界面框架