通过 Python 生成视频而不将各个帧保存为文件
使用 FuncAnimation 方法,我们可以创建一部影片。我们将创建一个自定义的方法 update 来持续修改粒子的位置,最后,该方法将返回散点实例。
步骤
获取粒子的初始位置、速度、力和大小。
创建新的图形,或激活带 figsize = (7, 7) 的现有图形。
向当前图形添加坐标轴,并将其设置为当前坐标轴,带 xlim 和 ylim。
针对粒子的初始位置绘制散点。
通过重复调用函数 *func* 来制作动画。我们可以将自定义的方法(帮助改变粒子的位置)传递到 FuncAnimation 类中。
使用 plt.show() 显示图形。
示例
import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation import numpy as np dt = 0.005 n = 20 L = 1 particles = np.zeros(n, dtype=[("position", float, 2), ("velocity", float, 2), ("force", float, 2), ("size", float, 1)]) particles["position"] = np.random.uniform(0, L, (n, 2)); particles["velocity"] = np.zeros((n, 2)); particles["size"] = 0.5 * np.ones(n); fig = plt.figure(figsize=(7, 7)) ax = plt.axes(xlim=(0, L), ylim=(0, L)) scatter = ax.scatter(particles["position"][:, 0], particles["position"][:, 1]) def update(frame_number): particles["force"] = np.random.uniform(-2, 2., (n, 2)); particles["velocity"] = particles["velocity"] + particles["force"] * dt particles["position"] = particles["position"] + particles["velocity"] * dt particles["position"] = particles["position"] % L scatter.set_offsets(particles["position"]) return scatter, anim = FuncAnimation(fig, update, interval=10) plt.show()
输出
广告