如何为Python实现的N体问题编写通用轨迹动画循环
N体问题通用动画逻辑实现方案
核心实现逻辑:用列表统一存储所有天体的轨迹Line3D对象,无需硬编码每个天体的更新逻辑,自动适配任意N值。
直接替换你原有代码中## 3D动画绘制下的所有代码即可,修改后完整代码段如下:
## 3D动画绘制 fig = plt.figure() ax = plt.axes(projection = '3d') ax.set_xlim3d(-7, 7) ax.set_ylim3d(-7, 7) ax.set_zlim3d(-7, 7) ax.set_xlabel("x (UA)") ax.set_ylabel("y (UA)") ax.set_zlabel("z (UA)") trail = [50]*N # 初始化所有天体的轨迹对象 lignes = [] for _ in range(N): ligne, = ax.plot([], [], "o-", markevery = 10000) lignes.append(ligne) def Animate3D(k): for i in range(N): # 第i个天体的坐标对应Y矩阵的3i、3i+1、3i+2列 col_offset = 3 * i trail_start = max(1, k - trail[i]) # 更新第i个天体的轨迹数据 lignes[i].set_data(Y[k:trail_start:-1, col_offset], Y[k:trail_start:-1, col_offset+1]) lignes[i].set_3d_properties(Y[k:trail_start:-1, col_offset+2]) return lignes anim3D = animation.FuncAnimation(fig, Animate3D, frames = n, interval = 30, blit = False) plt.show()
说明:原来你写的动态拼接ligne + i的写法是语法错误,Python不支持直接拼接字符串作为变量名访问对象,用列表存储所有轨迹对象后通过索引访问即可完美解决通用适配问题。
内容的提问来源于stack exchange,提问作者Nathz
相关产品推荐
相关产品推荐

