From 9ed7ad4d5e569802d7410a588e0cc4c5d967fa0b Mon Sep 17 00:00:00 2001 From: march3 Date: Sun, 23 Mar 2025 10:53:05 +0800 Subject: [PATCH] =?UTF-8?q?Python=E8=B6=85=E4=BA=BA-=E5=AE=87=E5=AE=99?= =?UTF-8?q?=E6=A8=A1=E6=8B=9F=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simulators/mpl_2d_simulator.py | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/simulators/mpl_2d_simulator.py b/simulators/mpl_2d_simulator.py index d0899e6..da08dc9 100644 --- a/simulators/mpl_2d_simulator.py +++ b/simulators/mpl_2d_simulator.py @@ -46,6 +46,7 @@ class 星球: self.名称偏移 = 名称偏移 self.轨迹 = [self.位置.copy()] self.轨迹最大长度 = 轨迹最大长度 + self.加速度 = np.zeros(2) def 更新(self, 星球列表, 时间步长): """ @@ -64,6 +65,7 @@ class 星球: 总力 += 力 # 计算加速度,单位:m s^-2 加速度 = 总力 / self.质量 + self.加速度 = 加速度 # 更新速度,单位:m/s self.速度 += 加速度 * 时间步长 # 更新位置,单位:m @@ -84,7 +86,7 @@ def 场景1(): 时间步长 = 0.01 # 创建星球列表 星球列表 = [ - 星球(质量=1e12, 位置=[0, 0], 速度=[0, 1], 颜色='red', 名称="太阳", 名称偏移=[2, 0]), + 星球(质量=1e12, 位置=[0, 0], 速度=[0, 1], 颜色='red', 名称="太阳", 名称偏移=[1, 0]), 星球(质量=1e9, 位置=[10, 0], 速度=[0, 2], 颜色='blue', 名称="蓝星"), 星球(质量=1e9, 位置=[-10, 0], 速度=[0, -2], 颜色='green', 名称="绿星") ] @@ -96,8 +98,8 @@ def 场景2(): global 星球列表, 时间步长 时间步长 = 0.2 星球列表 = [ - 星球(质量=1e12, 位置=[10, 0], 速度=[0, 1], 颜色='blue', 名称="蓝星", 名称偏移=[2, 0]), - 星球(质量=1e12, 位置=[-10, 0], 速度=[0, -1], 颜色='green', 名称="绿星", 名称偏移=[2, 0]) + 星球(质量=1e12, 位置=[10, 0], 速度=[0, 1], 颜色='blue', 名称="蓝星", 名称偏移=[1, 0]), + 星球(质量=1e12, 位置=[-10, 0], 速度=[0, -1], 颜色='green', 名称="绿星", 名称偏移=[1, 0]) ] 坐标轴.set_xlim(-50, 50) 坐标轴.set_ylim(-50, 50) @@ -138,13 +140,24 @@ def 更新(帧): for 星球 in 星球列表: 星球.更新(星球列表, 时间步长) + # 速度列表 = [坐标轴.text(0, 0, f"{round(星球.速度[0], 2)},{round(星球.速度[1], 2)}", color=星球.颜色) for 星球 in 星球列表] + # 加速度列表 = [坐标轴.text(0, 0, str(星球.加速度), color=星球.颜色) for 星球 in 星球列表] + 速度列表 = [] + 加速度列表 = [] for i, 星球 in enumerate(星球列表): 点列表[i].set_data(星球.位置[0], 星球.位置[1]) 轨迹 = np.array(星球.轨迹) 轨迹列表[i].set_data(轨迹[:, 0], 轨迹[:, 1]) 偏移量_x, 偏移量_y = 星球.名称偏移 - 名称列表[i].set_position((星球.位置[0] + 偏移量_x + 1, 星球.位置[1] + 偏移量_y)) - return 点列表 + 轨迹列表 + 名称列表 + 名称列表[i].set_position((星球.位置[0] + 偏移量_x + 0.5, 星球.位置[1] + 偏移量_y)) + 速度 = 坐标轴.text(星球.位置[0] + 偏移量_x + 0.5, 星球.位置[1] + 偏移量_y + 3, + f"v:{round(星球.速度[0], 2)},{round(星球.速度[1], 2)}", color=星球.颜色) + 加速度 = 坐标轴.text(星球.位置[0] + 偏移量_x + 0.5, 星球.位置[1] + 偏移量_y + 5, + f"a:{round(星球.加速度[0], 2)},{round(星球.加速度[1], 2)}", color=星球.颜色) + 速度列表.append(速度) + 加速度列表.append(加速度) + # 名称列表[i].set_position((星球.位置[0] + 偏移量_x + 0.5, 星球.位置[1] + 偏移量_y)) + return 点列表 + 轨迹列表 + 名称列表 + 速度列表 + 加速度列表 # 创建动画 -- GitLab