python模拟三个球进行互相引力运动


要使用Python模拟三个球体之间的相互引力作用,我们可以借助一些基本的物理原理和数学计算。这里提供一个简单的示例代码,使用欧拉方法来近似求解牛顿万有引力定律。 首先,我们需要定义几个基本参数: - 球的质量(mass) - 初始位置(position) - 初始速度(velocity) - 万有引力常数(G) 下面是一个具体的实现: ```python import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 定义万有引力常数 G = 6.67430e-11 # 单位:m^3 kg^-1 s^-2 class Ball: def __init__(self, mass, position, velocity): self.mass = mass self.position = np.array(position, dtype=float) self.velocity = np.array(velocity, dtype=float) def gravitational_force(ball1, ball2): """计算两个球体之间的引力""" r_vec = ball2.position - ball1.position r_mag = np.linalg.norm(r_vec) force_mag = G * ball1.mass * ball2.mass / (r_mag 2) force_vec = -force_mag * r_vec / r_mag return force_vec def update(balls, dt): """更新每个球的位置和速度""" forces = [] for i in range(len(balls)): net_force = np.zeros(3) for j in range(len(balls)): if i != j: net_force += gravitational_force(balls[i], balls[j]) forces.append(net_force) for i, ball in enumerate(balls): ball.velocity += forces[i] / ball.mass * dt ball.position += ball.velocity * dt # 创建三个球 ball1 = Ball(1e24, [0, 0, 0], [0, 2000, 0]) ball2 = Ball(1e24, [1e8, 0, 0], [0, 0, 2000]) ball3 = Ball(1e24, [1e8, 1e8, 0], [0, -2000, -2000]) balls = [ball1, ball2, ball3] # 模拟时间步长和总步数 dt = 60 # 单位:秒 total_steps = 10000 # 存储轨迹 trajectories = {ball: [] for ball in balls} for step in range(total_steps): update(balls, dt) for ball in balls: trajectories[ball].append(ball.position.copy()) # 绘制轨迹 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') colors = ['r', 'g', 'b'] for ball, color in zip(balls, colors): x, y, z = zip(*trajectories[ball]) ax.plot(x, y, z, color=color, label=f'Ball {balls.index(ball) + 1}') ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') ax.legend() plt.show() ``` 说明: 1. Ball 类:用于表示球的基本属性。 2. gravitational_force 函数:根据牛顿万有引力定律计算两个球之间的引力。 3. update 函数:更新每个球的位置和速度。 4. 绘图:使用 Matplotlib 的 3D 图形功能来展示轨迹。 这段代码可以作为起点,你可以根据需要调整参数、添加更多的物理细节或改进数值积分方法。 [2024-08-20 16:31:28 | AI写代码神器 | 802点数解答]
- c:\python\venv\zzz\scripts\python.exe c:\python\main.py traceback (most recent call last): file "c:\users\意\appdata\local\programs\python\python311\lib\site-packages\urllib3\connection.py", line 199, in _new_conn sock = connection.create_connection( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ file "c:\users\意\appdata\local\programs\python\python311\lib\site-packages\urllib3\util\connection.py", line 85, in create_connection raise err file "c:\users\意\appdata\local\programs\python\pyt(161点数解答 | 2024-10-31 00:39:36)242
- 作为**工程师,loadrunner 进行**的标准流程? 📋(215点数解答 | 2023-11-09 18:25:31)217
- P3631[NOIP2003 普及组] 乒乓球 普及- 字符串 NOIp 普及组 模拟 2003 标准IO 传统题 时间限制 1000ms 内存限制 256MB 通过/尝试次数 411/1121 来源 洛谷 题目背景 国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中 11 11 分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位,他退役之后走上了乒乓球研究工作,意图弄明白 11 11 分制和 21 21 分制对选手的不同影响。在开展他的研究之前,他首先需要对他多年比赛的统计数据进行一些分析,所以需要你的帮忙。 题目描述 华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在 11 11 分制和 21 21 分制下,双方的比赛结果(截至记录末尾)。 比如现在有这么一份记录,(其中 W W 表示华华获得一分, L L 表示华华对手获得一分): WWWWWWWWWWWWWWWWWWWWWWLW WWWWWWWWWWWWWWWWWWWWWWLW 在 11 11 分制下,此时(675点数解答 | 2025-04-28 18:19:45)186
- student = [张三,李四,王五,周六,赵七] score =[ ["会计学", "c语言", "java"], ["python", "程序设计", "java"], ["数据结构", "c语言", "java"], ["python", "c语言", "大学计算机基础"], ["python", "会计学", "信息管理"] ] 1.将两个列表转换为一个字典,名为dict2 2.遍历字典dict2 3.将dict2深拷贝 4.在拷贝后的文件上做如下操作: 1)删除周六的信息 2)添加键值对:“钱一”:["管理科学与工程", "大学计算机基础", "大学数学"] 3)修改“张三”的三个课程为"大学数学", "c语言", "python"(422点数解答 | 2024-10-29 15:43:54)221
- student = [张三,李四,王五,周六,赵七] score =[ ["会计学", "c语言", "java"], ["python", "程序设计", "java"], ["数据结构", "c语言", "java"], ["python", "c语言", "大学计算机基础"], ["python", "会计学", "信息管理"] ] 1.将两个列表转换为一个字典,名为dict2 2.遍历字典dict2 3.将dict2深拷贝 4.在拷贝后的文件上做如下操作: 1)删除周六的信息 2)添加键值对:“钱一”:["管理科学与工程", "大学计算机基础", "大学数学"] 3)修改“张三”的三个课程为"大学数学", "c语言", "python"(254点数解答 | 2024-10-29 16:01:39)219
- java调用python接口使用了以下方法 string pythonscriptpathpng = "ruoyi-edu\\src\\main\\java\\com\\gtvote\\edu\\python\\pptutils.py"; processbuilder pbpng = new processbuilder("python", pythonscriptpathpng, pptfilepath, "png"); process ppng = pbpng.start(); // 读取python脚本的输出 bufferedreader in = new bufferedreader(new inputstreamreader(ppng.getinputstream())); string line = null; while ((line = in.readline()) != null) { system.out.println(line); } ppng.waitfor(); // 等待 python 脚本执行完成 但是传入的中文会变成乱码(263点数解答 | 2024-06-06 17:07:59)228
- java调用python接口使用的string pythonscriptpathpng = "ruoyi-edu\\src\\main\\java\\com\\gtvote\\edu\\python\\pptutils.py"; processbuilder pbpng = new processbuilder("python", pythonscriptpathpng, pptfilepath, "png"); process ppng = pbpng.start(); // 读取 python 脚本写入的文件 bufferedreader reader = new bufferedreader(new filereader("count.txt")); ppng.waitfor(); 传入的中文是乱码(160点数解答 | 2024-06-06 17:18:39)265
- java调用python接口使用的 string pythonscriptpathpng = "ruoyi-edu\\src\\main\\java\\com\\gtvote\\edu\\python\\pptutils.py"; processbuilder pbpng = new processbuilder("python", pythonscriptpathpng, pptfilepath, "png"); process ppng = pbpng.start(); // 读取 python 脚本写入的文件 bufferedreader reader = new bufferedreader(new filereader("count.txt")); ppng.waitfor(); 传入的中文变成了乱码(344点数解答 | 2024-06-06 17:19:55)379
- java调用python接口使用的 string pythonscriptpathpng = "ruoyi-edu\\src\\main\\java\\com\\gtvote\\edu\\python\\pptutils.py"; processbuilder pbpng = new processbuilder("python", pythonscriptpathpng, pptfilepath, "png"); process ppng = pbpng.start(); // 读取 python 脚本写入的文件 bufferedreader reader = new bufferedreader(new filereader("count.txt")); ppng.waitfor(); java传入的中文值变成了乱码(264点数解答 | 2024-06-06 17:27:09)241
- d:pcharm\python项目vvenv\scripts)python.exe d:\pycharm\python项目\医院系统|1添加信息2查询信息3修改信息4删除信息 请输入需要的操作:1 1添加部门信息2添加医生信息3添加患者信息4添加护士信息5添加药品信息6添加患者 用药信息输入你要添加的信息 d:\pycharm\python项目\venv\scripts\python.exe d: \pycharm\pyth1添加信息2查询信息3修改信息4删除信息 请输入需要的操作:2 ' 1查询医生姓名及部门2查询科室的每个患者及其主治医师3查询科室就诊人数4查询患:者的主治医生及其职务科室5查询医 生主治的患者数量6查询患者用药情况7查询患者应缴金额8根据护 士编号查询护士姓名9查询同一 病房的患者 输入你要查询的内容: 1添加信息2查询信息3修改信息4删除信息 请输入需要的操作:3 1修改药品库存2修改药品价格修改患者使用药品数量 4修改患者预计出院时间5修改患者房间号码输入你要修改的内容:(31点数解答 | 2024-05-22 11:20:34)382
- java调用python接口 以下方法 //调用吧ppt转换成图片的py脚本 string pythonscriptpathpng = "ruoyi-edu\\src\\main\\java\\com\\gtvote\\edu\\python\\pptutils.py"; processbuilder pbpng = new processbuilder("python", pythonscriptpathpng, pptfilepath, "png"); process ppng = pbpng.start(); // 读取python脚本的输出 bufferedreader in = new bufferedreader(new inputstreamreader(ppng.getinputstream())); string line = null;(295点数解答 | 2024-06-06 17:07:15)211
- 使用 python 实现将当前目录中的文件名字输入到"url.txt"文件(每行一个文件名),语言方向:Python(127点数解答 | 2024-12-25 11:19:25)131