gpt4 book ai didi

python - 在 Python 中使用 "Disappearing Tail"动画化粒子路径

转载 作者:太空宇宙 更新时间:2023-11-04 09:47:43 26 4
gpt4 key购买 nike

我正在尝试为 2d 路径制作动画,我希望它有一种“消失的尾部”,在任何给定时间,它只显示最后 5 个(例如)粒子。

我目前拥有的与此相去甚远:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation, rc
from IPython.display import HTML

sample_path = np.random.uniform(size=(100,2))

fig, ax = plt.subplots()

x = np.arange(-1, 1, 0.01) # x-array
line, = ax.plot(sample_path[0,0], sample_path[0,1])

def connect(i):
(x0,y0) = sample_path[i-1,:]
(x1,y1) = sample_path[i,:]
plt.plot([x0,x1],[y0,y1],'ro-')
return line,

def init():
line.set_ydata(np.ma.array(x, mask=True))
return line,

ani = animation.FuncAnimation(fig, connect, np.arange(1, 100), init_func=init,
interval=200, blit=True)
HTML(ani.to_html5_video())

这保留了“完整的尾部”,即在 k 步之后,它显示了所有前 k 个位置。

有没有办法调整我所拥有的,以便动画只显示粒子的最新历史?

最佳答案

您可能希望更新线条而不是向绘图添加大量新点。选择最近的 5 个点可以通过索引来完成,例如

sample_path[i-5:i, 0]

完整示例,我们注意不要有负索引,也不使用 blit(如果保存动画则没有意义)。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation, rc

r = np.sin(np.linspace(0,3.14,100))
t = np.linspace(0, 10, 100)
sample_path = np.c_[r*(np.sin(t)+np.cos(t)), r*(np.cos(t)-np.sin(t))]/1.5

fig, ax = plt.subplots()

line, = ax.plot(sample_path[0,0], sample_path[0,1], "ro-")

def connect(i):
start=max((i-5,0))
line.set_data(sample_path[start:i,0],sample_path[start:i,1])
return line,

ax.set_xlim(-1,1)
ax.set_ylim(-1,1)
ani = animation.FuncAnimation(fig, connect, np.arange(1, 100), interval=200)
plt.show()

enter image description here

关于python - 在 Python 中使用 "Disappearing Tail"动画化粒子路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49119896/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com