我制作了一个简单的n体模拟器,并使用以下代码绘制/动画运动:
for i in range(N):
[...]
x = [ Rbod[j][0], Rbod[j][0]]
y = [ Rbod[j][1], Rbod[j][1]]
#print(R1, V1, A1, F12)
if i%10 == 0:
print(i)
pylab.ion()
pylab.scatter( x, y, c=(j/nbodies,j/nbodies,j/nbodies) )
pylab.axis([-400, 400, -400, 400])
pylab.draw()
现在我真的想把动画保存为gif格式。这可能吗?互联网含糊其辞地说,这是但不是关于如何做与pylab
。
4体交互示例:
我用ffmpeg解决了这个问题,一个转换程序通过命令行运行。 所以,首先我保存所有独立的图片,然后把它们变成一个avi和一个gif的avi。
查看matplotlib中的动画教程。http://nbviewer.ipython.org/urls/raw.github.com/jakevdp/matplotlib_pydata2013/master/notebooks/05_Animations.ipynb
快速搜索显示如何创建mp4动画,然后可以使用第三方工具将其转换为所需的格式。
简单而有效的解决方案是在循环中使用
pylab.savefig(filename)
,并为每个帧保存一个文件,即在pylab.draw()
之后。文件名应该反映循环索引,即frame0001.png
,frame0002.png
,…然后使用FFmpeg(http://www.ffmpeg.org/)将它们缝合在一起。已经有一个问题和一个答案是如何工作的(Create animated gif from a set of jpeg images)。FFmpeg有很多选择。例如,可以调整帧速率。相关问题 更多 >
编程相关推荐