当前位置: 首页 > article >正文

从台球碰撞到火箭发射:用Python模拟动量守恒定律的5个趣味案例

从台球碰撞到火箭发射用Python模拟动量守恒定律的5个趣味案例物理学中的动量守恒定律看似抽象但通过编程模拟我们可以直观地观察这一原理在各类场景中的应用。本文将带你用Python实现5个经典案例从台球碰撞到火箭发射让物理定律活起来。1. 台球碰撞二维弹性碰撞模拟台球桌上的碰撞是理解动量守恒最直观的案例。使用Pygame库我们可以创建一个简单的二维台球碰撞模拟器import pygame import numpy as np class Ball: def __init__(self, x, y, radius, mass, color): self.pos np.array([x, y], dtypefloat) self.vel np.array([0, 0], dtypefloat) self.radius radius self.mass mass self.color color def update(self, dt): self.pos self.vel * dt def collide(self, other): dist np.linalg.norm(self.pos - other.pos) if dist self.radius other.radius: # 计算碰撞后的速度 v1_new, v2_new elastic_collision_2d( self.vel, other.vel, self.mass, other.mass, self.pos, other.pos ) self.vel v1_new other.vel v2_new关键物理原理在于elastic_collision_2d函数的实现它基于以下公式动量守恒m₁v₁ m₂v₂ m₁v₁ m₂v₂动能守恒½m₁v₁² ½m₂v₂² ½m₁v₁² ½m₂v₂²注意实际模拟中需要考虑数值精度问题建议使用小步长迭代来减少能量损失。2. 火箭推进变质量系统的动量守恒火箭推进是变质量系统的典型应用。我们可以用微分方程来描述火箭速度随时间的变化import matplotlib.pyplot as plt def rocket_simulation(m0, m_dot, u, t_max, dt): m0: 初始质量 m_dot: 质量变化率 (kg/s) u: 喷气速度 (m/s) t_max: 模拟时间 dt: 时间步长 t 0 v 0 m m0 times [] velocities [] while t t_max and m 0: # 火箭方程: dv u * (dm/m) dv u * (-m_dot) / m * dt v dv m m_dot * dt t dt times.append(t) velocities.append(v) plt.plot(times, velocities) plt.xlabel(Time (s)) plt.ylabel(Velocity (m/s)) plt.title(Rocket Velocity vs Time) plt.show()这个模拟展示了齐奥尔科夫斯基火箭方程的核心思想火箭速度变化与喷气速度和质量比的对数成正比。3. 弹簧振子动量与能量的周期性转换弹簧振子系统展示了动量和能量的周期性转换。我们可以用数值积分方法来模拟from scipy.integrate import odeint def spring_mass_system(state, t, k, m): x, v state dxdt v dvdt -k/m * x return [dxdt, dvdt] # 初始条件 x0 1.0 # 初始位移 v0 0.0 # 初始速度 k 10.0 # 弹簧系数 m 1.0 # 质量 # 时间点 t np.linspace(0, 10, 1000) # 解ODE solution odeint(spring_mass_system, [x0, v0], t, args(k, m)) # 绘制结果 plt.plot(t, solution[:, 0], labelDisplacement) plt.plot(t, solution[:, 1], labelVelocity) plt.legend() plt.xlabel(Time) plt.ylabel(Value) plt.title(Spring-Mass System) plt.show()在这个系统中动量和位移呈现90°的相位差完美展示了能量在动能和势能间的转换。4. 汽车碰撞完全非弹性碰撞分析两车相撞后的共同运动是动量守恒的经典案例。我们可以创建一个简单的分析工具def car_collision(m1, v1, m2, v2, restitution0.5): 计算碰撞后的速度 restitution: 恢复系数 (0为完全非弹性1为完全弹性) total_mass m1 m2 total_momentum m1 * v1 m2 * v2 # 完全非弹性碰撞后的共同速度 v_final total_momentum / total_mass # 考虑恢复系数 v1_final v_final restitution * (v_final - v1) v2_final v_final restitution * (v_final - v2) return v1_final, v2_final我们可以用这个函数分析不同质量、速度和恢复系数下的碰撞结果情景车1质量 (kg)车1初速 (m/s)车2质量 (kg)车2初速 (m/s)恢复系数车1末速车2末速11500201500-100.24.175.832200015100000.57.515.05. 粒子系统多体碰撞中的动量守恒最后我们创建一个简单的2D粒子系统展示多体碰撞中的动量守恒import random class ParticleSystem: def __init__(self, width, height, num_particles): self.width width self.height height self.particles [] for _ in range(num_particles): x random.uniform(0, width) y random.uniform(0, height) vx random.uniform(-50, 50) vy random.uniform(-50, 50) radius random.uniform(5, 15) mass radius ** 2 # 假设质量与面积成正比 color (random.randint(50, 255), random.randint(50, 255), random.randint(50, 255)) self.particles.append(Ball(x, y, radius, mass, color)) def update(self, dt): for i, p1 in enumerate(self.particles): p1.update(dt) # 边界碰撞 if p1.pos[0] p1.radius or p1.pos[0] self.width - p1.radius: p1.vel[0] * -1 if p1.pos[1] p1.radius or p1.pos[1] self.height - p1.radius: p1.vel[1] * -1 # 粒子间碰撞 for p2 in self.particles[i1:]: p1.collide(p2)在这个系统中我们可以实时监测系统总动量的变化验证动量守恒定律def total_momentum(system): total np.array([0.0, 0.0]) for p in system.particles: total p.mass * p.vel return total数值模拟中的常见问题与解决方案在实现这些物理模拟时有几个常见陷阱需要注意能量损失问题原因离散时间步长导致的数值误差解决方案使用更小的步长或改进的积分方法如Verlet积分穿透问题现象高速物体可能穿过其他物体解决方法实现连续碰撞检测或使用射线检测性能优化对于多粒子系统使用空间分区技术如四叉树减少碰撞检测次数# Verlet积分示例 class VerletBall(Ball): def __init__(self, x, y, radius, mass, color): super().__init__(x, y, radius, mass, color) self.prev_pos np.array([x, y], dtypefloat) def update(self, dt, acceleration): new_pos 2 * self.pos - self.prev_pos acceleration * dt**2 self.prev_pos self.pos self.pos new_pos self.vel (self.pos - self.prev_pos) / dt通过这些案例我们不仅验证了动量守恒定律还掌握了将物理原理转化为可视化模拟的实用技能。在实际项目中这些技术可以应用于游戏开发、工程仿真和教育工具等多个领域。

相关文章:

从台球碰撞到火箭发射:用Python模拟动量守恒定律的5个趣味案例

从台球碰撞到火箭发射:用Python模拟动量守恒定律的5个趣味案例 物理学中的动量守恒定律看似抽象,但通过编程模拟,我们可以直观地观察这一原理在各类场景中的应用。本文将带你用Python实现5个经典案例,从台球碰撞到火箭发射&#x…...

Open WebUI:5分钟搭建你的专属AI助手,开启完全离线智能对话新时代

Open WebUI:5分钟搭建你的专属AI助手,开启完全离线智能对话新时代 【免费下载链接】open-webui User-friendly AI Interface (Supports Ollama, OpenAI API, ...) 项目地址: https://gitcode.com/GitHub_Trending/op/open-webui Open WebUI是一款…...

【每日一题】一文搞懂消费类电子的电池容量单位

我们平时使用移动充电宝,笔记本电脑,手机,智能穿戴设备,例如智能眼镜,经常看到标注的电池的容量大小,被五花八门的单位搞得晕头转向,今天我们就来看看这些单位,例如mA,mA…...

从一道ACM题看博弈论:当Alice和Bob开始‘吃瓜’比赛时,到底谁更占便宜?

从一道ACM题看博弈论:当Alice和Bob开始‘吃瓜’比赛时,到底谁更占便宜? 想象一下这样的场景:Alice和Bob面前摆着一堆西瓜,两人轮流拿取,每次可以拿任意数量的瓜,但必须花时间吃完才能继续拿。Al…...

终极glogg指南:如何用这款免费跨平台日志查看器快速分析海量日志文件

终极glogg指南:如何用这款免费跨平台日志查看器快速分析海量日志文件 【免费下载链接】glogg A fast, advanced log explorer. 项目地址: https://gitcode.com/gh_mirrors/gl/glogg glogg是一款专为程序员和系统管理员设计的跨平台GUI日志查看器,…...

收藏!SaaS小白必看:AI大模型落地实战路线图,从功能堆砌到价值创造

本文分析了SaaS公司在整合AI大模型时应避免“功能堆砌”陷阱,并介绍了三大AI技术路线:Prompt/RAG/微调的特点及适用场景。文章强调SaaSAI产品的成功关键在于技术路线与客户价值的适配,提出了分阶段组合策略,即初创期以提示词为主&…...

实战指南:如何高效配置VcXsrv实现Windows与Linux图形应用无缝连接

实战指南:如何高效配置VcXsrv实现Windows与Linux图形应用无缝连接 【免费下载链接】vcxsrv VcXsrv Windows X Server (X2Go/Arctica Builds) 项目地址: https://gitcode.com/gh_mirrors/vc/vcxsrv 在跨平台开发工作中,开发者经常面临一个核心挑战…...

5分钟快速上手Qwerty Learner:提升英语打字效率的终极指南

5分钟快速上手Qwerty Learner:提升英语打字效率的终极指南 【免费下载链接】qwerty-learner 为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件 / Words learning and English muscle memory training software designed for keyboard workers 项目地址: https:/…...

保姆级教程:从Vivado导出的XSA文件到Petalinux定制Linux系统(以AX7010开发板为例)

从XSA到嵌入式Linux:基于Petalinux的Zynq开发板全流程实战指南 第一次接触Zynq和Petalinux的开发者常会遇到这样的困惑:Vivado生成的硬件描述文件如何转化为可启动的Linux系统?本文将手把手带你完成从XSA文件到完整Linux系统的全流程构建&…...

Edge组策略避坑指南:当企业AD域遇到浏览器管控,这5个细节最容易翻车

Edge组策略避坑指南:企业AD域环境下的5个关键配置陷阱 1. 策略模板版本冲突:被忽视的兼容性杀手 在AD域环境中部署Edge浏览器管控时,策略模板版本与浏览器实际版本不匹配是最常见的翻车点。许多管理员直接从微软官网下载最新策略模板&#…...

博维数孪:三维技术图册助力企业提升装配效率

博维数孪近日宣布,其三维技术图册产品已成功帮助多家制造企业提升了装配效率,实现了装配流程的数字化和智能化。 更重要的是,把它落到“交付物清单—验收口径—证据链”三件套上:交付什么(如数字化手册、三维技术图册、…...

3步轻松搞定暗黑破坏神2存档编辑:告别复杂十六进制操作

3步轻松搞定暗黑破坏神2存档编辑:告别复杂十六进制操作 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 还在为暗黑破坏神2存档修改而头疼吗?你是否曾经因为看不懂十六进制代码而放弃修改角色属性&#xf…...

别再只会dir和cd了!Windows 11/10下PowerShell 7.x的10个高效命令与场景实战

Windows 11/10下PowerShell 7.x的10个高效命令与场景实战 你是否还在Windows系统中反复点击鼠标完成文件操作?是否还在为批量处理数据而苦恼?PowerShell 7.x作为微软新一代命令行工具,正在彻底改变Windows用户的工作方式。与传统的CMD相比&am…...

实战避坑指南:从零到一,用openMVG+openMVS重建自定义数据集

1. 环境准备:从零搭建openMVGopenMVS开发环境 第一次接触三维重建时,我像大多数新手一样被各种依赖库和编译错误折磨得够呛。记得当时为了跑通第一个demo,整整花了两天时间解决libjpeg版本冲突问题。如果你也在Ubuntu系统上配置openMVG和open…...

上海全屋定制工厂机构排名

在上海这座国际化大都市中,家居定制行业百花齐放,而上海尚岛伟奇全屋定制工厂(简称"尚岛伟奇美学定制")凭借二十余年的行业积淀,已成为众多家庭值得信赖的家居定制选择。源起与发展:扎根上海&…...

别再手动写滤波器了!用MATLAB的filterDesigner(原fdatool)5分钟搞定一个IIR低通滤波器

5分钟极速设计IIR滤波器:MATLAB filterDesigner全流程实战指南 在信号处理领域,滤波器设计一直是工程师和研究者绕不开的核心技能。传统的手动设计方法不仅需要深厚的理论基础,还要编写大量验证代码,整个过程耗时费力。而MATLAB的…...

uniapp 中利用本地存储实现tab页面间高效传参方案

1. 为什么tab页面传参是个难题? 第一次用uniapp开发带底部导航栏的应用时,我就被tab页面传参问题坑得不轻。明明在普通页面间用uni.navigateTo传参毫无压力,怎么到了tab页面就失效了呢?后来才发现,这和uniapp的页面生命…...

2026届毕业生推荐的降AI率网站推荐榜单

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 基于自然语言处理以及机器学习算法的AI论文查重技术,能够在海量学术数据库中进行…...

Unity开发避坑指南:手把手教你排查和解决NullReferenceException空引用异常(附2022最新引擎Bug说明)

Unity开发实战:深度解析NullReferenceException排查与解决方案 在Unity开发过程中,NullReferenceException(空引用异常)堪称最令人头疼的"老朋友"之一。这个看似简单的错误提示背后,往往隐藏着从基础语法疏忽…...

HideVolumeOSD:3个场景告诉你,为什么你需要隐藏Windows音量弹窗

HideVolumeOSD:3个场景告诉你,为什么你需要隐藏Windows音量弹窗 【免费下载链接】HideVolumeOSD Hide the Windows 10 volume bar 项目地址: https://gitcode.com/gh_mirrors/hi/HideVolumeOSD 想象一下,你在重要的在线会议中分享屏幕…...

网络基石——深入解析STP协议中BPDU报文的选举逻辑与实战配置

1. 为什么需要STP协议? 想象一下你住在一个小镇上,所有房子都用双向道路连接。如果每条路都保持畅通,邮递员送信时可能会陷入无限循环——从A路出发绕一圈又回到起点。这就是早期交换网络面临的广播风暴问题:当交换机之间形成物理…...

从入门到精通:ComboBox组合框控件的核心属性与实战应用

1. ComboBox组合框控件入门指南 第一次接触ComboBox时,我被它简洁的外观和强大的功能所吸引。这个看似简单的下拉框控件,在实际开发中却能解决很多交互难题。ComboBox本质上是一个结合了文本框和列表框功能的复合控件,用户既可以从预设选项中…...

2分钟解决iPhone网络共享问题:Windows用户的免费终极方案

2分钟解决iPhone网络共享问题:Windows用户的免费终极方案 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://gitcode.com/gh_…...

SAP预留与锁料功能深度对比:如何选择最适合你的物料控制方案

SAP预留与锁料功能深度对比:如何选择最适合你的物料控制方案 物料管理是制造业企业运营的核心环节之一。在SAP系统中,预留(Reservation)和锁料(Material Blocking)是两种常用的物料控制机制,它们都能确保关键物料在需要时可用,但实…...

使用 LangGraph 构建状态化 Agent Harness

使用 LangGraph 构建状态化 Agent Harness 标题选项 从零到一:使用 LangGraph 构建高度可控的状态化 Agent 系统 LangGraph 实战指南:构建具有记忆和推理能力的智能 Agent Harness 告别简单链:使用 LangGraph 构建复杂状态化 Agent 的完整教程 掌握 LangGraph:构建企业级状…...

CnOpenData A股上市公司招股说明书公告数据

根据2007年1月30日证监会令第40号公布的《上市公司信息披露管理办法》,为规范发行人、上市公司及其他信息披露义务人的信息披露行为,上市公司应当及时、准确、完整地披露相关信息,包括招股说明书、募集说明书、上市公告书、定期报告和临时报告…...

VRCT终极指南:免费解锁VRChat多语言交流的神奇工具

VRCT终极指南:免费解锁VRChat多语言交流的神奇工具 【免费下载链接】VRCT VRCT(VRChat Chatbox Translator & Transcription) 项目地址: https://gitcode.com/gh_mirrors/vr/VRCT 你是否曾在VRChat中因为语言障碍而错失精彩对话?当你听到日语…...

Visual Studio:打开#包诊断

例如,下面代码的前面引用了两个头文件,但不知道哪个没有被引用:在代码编辑区右键单击,在上下文菜单中选择 #include指令-》打开#包诊断:可以看到,string.h 这个头文件0引用,所以可以放心删除&am…...

5分钟掌握League Akari:英雄联盟终极智能助手使用指南

5分钟掌握League Akari:英雄联盟终极智能助手使用指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League Akari是一款基于英雄…...

CnOpenData A股上市公司股权激励公告数据

根据2007年1月30日证监会令第40号公布的《上市公司信息披露管理办法》,为规范发行人、上市公司及其他信息披露义务人的信息披露行为,上市公司应当及时、准确、完整地披露相关信息,包括招股说明书、募集说明书、上市公告书、定期报告和临时报告…...