Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 设置mayavi points3d绘图的动画_Python_Animation_Vtk_Mayavi - Fatal编程技术网

Python 设置mayavi points3d绘图的动画

Python 设置mayavi points3d绘图的动画,python,animation,vtk,mayavi,Python,Animation,Vtk,Mayavi,我正试图制作一个粒子轨迹的视频。然而,不知何故,我的场景从未更新。下面是一个非常简单的示例: 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

我正试图制作一个粒子轨迹的视频。然而,不知何故,我的场景从未更新。下面是一个非常简单的示例:

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、Mayavi 4.1、VTK 5.8

您尝试过mlab_source.reset吗?即使x、y和z阵列的长度发生更改,它也可以工作

在您的情况下,它将是:
plt.mlab\u source.reset(x=x,y=y,z=z)

只需更改为:

根据
mlab\u source.set
的说法,您甚至不需要
f.scene.render()

另外,由于数据的
形状
不会改变,因此不需要使用
mlab\u source.reset


我也进行了测试,效果很好。

我也不熟悉使用Mayavi-您是否尝试过使用mlab.clf(figure=Mayavi_场景)来清除每个周期的图形?
    for (x, y, z) in zip(xs, ys, zs):
        print('Updating scene...')
        plt.mlab_source.set(x=x, y=y, z=z)
        yield