2024-04-24 13:35:22 发布
网友
可能您是从this example的随机游走代码开始工作的。 这是一个很好的例子,但要理解他们在做什么并不总是容易的。你知道吗
这个例子有一个函数Gen_RandLine,他们调用这个函数50次,每次行走一次。你只有三次散步,所以你只能叫它三次。而且,在x1、x2、x3中已经有了完整的轨迹,而它们是从头开始生成轨迹的。你的情况不同,因为你的轨迹相互依赖,而在这个例子中,轨迹是随机的和独立的。你知道吗
Gen_RandLine
无论如何,我调用了generate_lines_from_x123函数来更好地表达它的功能。你知道吗
generate_lines_from_x123
我还为x1,x2,x3创建了一些测试数据,因为我没有你的模拟功能。只有3个易于编程的螺旋。你知道吗
在函数中updatelinesdataLines包含所有数据,而lines只包含在每个步骤中实际绘制的线。你知道吗
updatelines
dataLines
lines
以下是您的代码的改编,它似乎按预期运行:
import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation from mpl_toolkits.mplot3d import Axes3D N = 500 # number of steps x1 = np.zeros((N, 3)) x2 = np.zeros((N, 3)) x3 = np.zeros((N, 3)) t = np.linspace(0, 20, N) x1[:,0] = np.sin(t) x1[:,1] = np.cos(t) x1[:,2] = t x2[:,0] = np.sin(t+1) x2[:,1] = np.cos(t+1) x2[:,2] = t x3[:,0] = np.sin(t+2) x3[:,1] = np.cos(t+2) x3[:,2] = t def generate_lines_from_x123(length, x1, dims=3): lineData = np.empty((dims, length)) lineData[:,0] = x1[0] for index in range(1, length) : lineData[:, index] = x1[index] return lineData def updatelines(num, dataLines, lines) : for line, data in zip(lines, dataLines) : line.set_data(data[0:2, :num]) line.set_3d_properties(data[2,:num]) return lines fig = plt.figure(figsize = (15,15)) ax = fig.add_subplot(111, projection = '3d') ax.set_title('3 Body Problem') do_animation = True if do_animation: data = [generate_lines_from_x123(N, x, 3) for x in (x1, x2, x3)] lines = [ax.plot(x[:,0], x[:,1], x[:,2])[0] for x in (x1, x2, x3)] line_ani = animation.FuncAnimation(fig, updatelines, N, fargs=(data, lines), interval=100, blit=False) else: # just plot the 3 curves ax.plot(x1[:,0],x1[:,1],x1[:,2],color = 'b') ax.plot(x2[:,0],x2[:,1],x2[:,2],color = 'm') ax.plot(x3[:,0],x3[:,1],x3[:,2],color = 'g') ax.scatter(x1[-1,0],x1[-1,1],x1[-1,2],color = 'b', marker = 'o', s=30, label = 'Mass 1') ax.scatter(x2[-1,0],x2[-1,1],x2[-1,2],color = 'm', marker = 'o',s=90, label = 'Mass 2') ax.scatter(x3[-1,0],x3[-1,1],x3[-1,2],color = 'g', marker = 'o',s=60, label = 'Mass 3') ax.legend() plt.show()
可能您是从this example的随机游走代码开始工作的。 这是一个很好的例子,但要理解他们在做什么并不总是容易的。你知道吗
这个例子有一个函数
Gen_RandLine
,他们调用这个函数50次,每次行走一次。你只有三次散步,所以你只能叫它三次。而且,在x1、x2、x3中已经有了完整的轨迹,而它们是从头开始生成轨迹的。你的情况不同,因为你的轨迹相互依赖,而在这个例子中,轨迹是随机的和独立的。你知道吗无论如何,我调用了
generate_lines_from_x123
函数来更好地表达它的功能。你知道吗我还为x1,x2,x3创建了一些测试数据,因为我没有你的模拟功能。只有3个易于编程的螺旋。你知道吗
在函数中
updatelines
dataLines
包含所有数据,而lines
只包含在每个步骤中实际绘制的线。你知道吗以下是您的代码的改编,它似乎按预期运行:
相关问题 更多 >
编程相关推荐