重复后保存动画

问题描述

如果已经为 Clifford attractor 实现了动画

xn+1 = sin(a yn) + c cos(a xn)

yn+1 = sin(b xn) + d cos(b yn)

动画会改变参数并通过移动的红色圆盘来表明这一点。

为了返回和移动,我引入了一个步进方向,每次达到 maxframes 时都会翻转该方向,即计数器的值为 0。

不幸的是,animate 函数似乎 - 或者被 - 总是被调用两次,为什么?

我已经解决了这个问题,现在是主要问题!

电影中只存储了一个 wy ...

a,b,c,d = -1.4,1.6,1.0,0.7 # Parameter
xmin,xmax,ymin,ymax=-2,2.5,-2,2

import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation as ani
from timeit import default_timer as timer

fig,ax = plt.subplots(figsize=(6,6))

nmax=15000; x0,y0=xmin,ymin
XYc = np.zeros((nmax,3))
maxframes=200
deltax=(xmax-xmin)/maxframes
deltay=(ymax-ymin)/maxframes

Deltapar = 1
deltapar = 2*Deltapar/maxframes
amin,bmin,cmin,dmin = a-Deltapar,b-Deltapar,c-Deltapar,d-Deltapar
amax,bmax,cmax,dmax = a+Deltapar,b+Deltapar,c+Deltapar,d+Deltapar

from numba import jit

@jit
def iteration(a,d,x,y,XYc):
    XYc[0]=x,x-x
    for i in range(1,nmax):
        x,y = np.sin(a*y) + c*np.cos(a*x),np.sin(b*x) + d*np.cos(b*y)
        XYc[i]=x,i/nmax

iteration(a,x0,y0,XYc)
title='Clifford Attractor: a=%.2f,b=%.2f,c=%.2f,d=%.2f'%(a,d)
ax.set_title(title)
ax.set_xlim(xmin,xmax)
ax.set_ylim(ymin,ymax)
plt.tight_layout()
myCmap = plt.cm.get_cmap('gist_ncar_r')

dots,=ax.plot(XYc[:,0],XYc[:,1],",linewidth=0.1)
dotm,=ax.plot([xmin],[ymin],marker="o",color="r")

step=1
anicount=0

def animate(i):
    global anicount,step
    if i==0:        
        anicount+=1        
        if anicount%2==0: step = -step
        print("#",anicount," ",step)

    if step==1:
        am=amin+i*deltapar
        xm=xmin+i*deltax
        ym=ymin+i*deltay
    else:
        am=amax-i*deltapar
        xm=xmax-i*deltax 
        ym=ymax-i*deltay

    iteration(am,XYc)
    dots.set_data(XYc[:,1])
    dotm.set_data([xm],[ym])

    return dotm,dots,anim = ani.FuncAnimation(
    fig,animate,frames=maxframes,interval=10,blit=True)       

fname='cliffordattr'
#anim.save(fname+'.mp4')
#plt.savefig(fname+'.jpg')
#plt.savefig(fname+'.eps')
plt.show()

我曾尝试将 extra_anim=[...,...] 选项用于 savefig

anim1.save(fname+'1.mp4',fps=30)
anim2.save(fname+'2.mp4',fps=30)
anim1.save(fname+'12.mp4',fps=30,extra_anim=[anim1,anim2,])

但电影仍然只有一个方向。

  • 如何在一部电影中保存多个动画周期???
  • 如何在一部影片中保存不同的动画?
  • 为什么 animate 会被调用两次?

感谢任何帮助

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)