动画一个Mayavi的points3d阴谋(Animating a mayavi points3d

2019-07-18 03:25发布

我试图使粒子的运动轨迹的视频。 然而,不知何故我的场景永远不会更新。 这里是一个非常简单的例子:

from __future__ import absolute_import, division, print_function
from mayavi import mlab
import numpy as np
import math

alpha = np.linspace(0, 2*math.pi, 100)  

xs = np.cos(alpha)
ys = np.sin(alpha)
zs = np.zeros_like(xs)

mlab.points3d(0,0,0)
plt = mlab.points3d(xs[:1], ys[:1], zs[:1])

@mlab.animate(delay=100)
def anim():
    f = mlab.gcf()
    while True:
        for (x, y, z) in zip(xs, ys, zs):
            print('Updating scene...')
            plt.mlab_source.x[0] = x
            plt.mlab_source.y[0] = y
            plt.mlab_source.z[0] = z
            f.scene.render()
            yield


anim()
mlab.show()

如果我运行此脚本,它显示了两分,动画GUI的窗口。 它还打印的连续流中的“更新场景...”的消息在终端上。 然而,现场并没有展示任何任何运动。

我究竟做错了什么?

Python 2.7版,4.1 Mayavi的,VTK 5.8

Answer 1:

只是更改为:

...

    for (x, y, z) in zip(xs, ys, zs):
        print('Updating scene...')
        plt.mlab_source.set(x=x, y=y, z=z)
        yield

...

你甚至都不需要f.scene.render()根据文件 mlab_source.set保证刷新。

此外,由于shape您的数据不会改变你不需要使用mlab_source.reset

我还测试和工程罚款。



Answer 2:

您是否尝试过mlab_source.reset? 它的工作原理,即使在x,y和z的阵列的长度被改变。

根据你的情况,这将是: plt.mlab_source.reset(x=x,y=y,z=z)



文章来源: Animating a mayavi points3d plot