我正在尝试构建N体仿真。每个迭代时间步长后,将更新每个实体(给定的N个实体)的坐标。例如,下面给出了3
个(2
)时间步中每个10e4
主体的位置坐标;第一,第二和第三列分别对应于x,y和z坐标,而每一行代表一个唯一的正文:
*- STEP #0:
INITIAL POSITIONS:
[[ 0. 0. 0.]
[10. 10. 10.]
[11. 11. 11.]]
FINAL POSITIONS:
[[2.34593746e-11 2.34593746e-11 2.34593746e-11]
[1.00000000e+01 1.00000000e+01 1.00000000e+01]
[1.10000000e+01 1.10000000e+01 1.10000000e+01]]
*- STEP #1:
INITIAL POSITIONS:
[[2.34593746e-11 2.34593746e-11 2.34593746e-11]
[1.00000000e+01 1.00000000e+01 1.00000000e+01]
[1.10000000e+01 1.10000000e+01 1.10000000e+01]]
FINAL POSITIONS:
[[7.03781237e-11 7.03781237e-11 7.03781237e-11]
[1.00000000e+01 1.00000000e+01 1.00000000e+01]
[1.10000000e+01 1.10000000e+01 1.10000000e+01]]
*- STEP #2:
INITIAL POSITIONS:
[[7.03781237e-11 7.03781237e-11 7.03781237e-11]
[1.00000000e+01 1.00000000e+01 1.00000000e+01]
[1.10000000e+01 1.10000000e+01 1.10000000e+01]]
FINAL POSITIONS:
[[1.40756247e-10 1.40756247e-10 1.40756247e-10]
[1.00000000e+01 1.00000000e+01 1.00000000e+01]
[1.10000000e+01 1.10000000e+01 1.10000000e+01]]
我希望看到这些数据的图形表示。
在定义的类中提供了更新这些坐标的方法,该类太长而无法在此处包含。但是,主要/相关部分如下。
def propagate_in_time(self):
""" """
for ith_step in range(self.nsteps):
# print("\n*- STEP #{}:\n".format(ith_step))
# print("\nINITIAL POSITIONS:\n{}\n".format(self.position))
self.update_acceleration()
self.update_velocity()
self.update_displacement()
self.update_position()
# print("\nFINAL POSITIONS:\n{}\n".format(self.position))
因此,当尝试创建这些坐标的3维图形时,我正在考虑在for循环外创建图形实例,在for循环内进行绘图,并在for循环外显示该绘图{{3 }}。我的尝试如下:
def propagate_in_time(self, facecolors=('k', 'orange', 'yellow'):
""" """
fig, ax = plt.subplots()
for body, facecolor in zip(self.celestial_bodies, facecolors):
ax.plot(body.position, color=facecolor)
for ith_step in range(self.nsteps):
ax = fig.add_subplot(111)
self.update_acceleration()
self.update_velocity()
self.update_displacement()
self.update_position()
for pos, facecolor in zip(self.position, facecolors):
ax.plot(pos, color=facecolor)
plt.show()
尽管position
中的每个self.position
是由3个元素组成的平面数组,但我获得的输出图(从所有时间步长)显示如下。
我觉得很奇怪,因为我确保包括以下进口。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
主要问题:
如何获取此数据的dim-3图?此外,还有更好的方法可视化此数据吗?
次要/次要问题:
假设每个位置的z分量为0
。这会改变您将数据可视化的方法吗?