提交 9ed7ad4d 编写于 作者: 三月三net's avatar 三月三net

Python超人-宇宙模拟器

上级 3f8f23e1
......@@ -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 点列表 + 轨迹列表 + 名称列表 + 速度列表 + 加速度列表
# 创建动画
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册