使用mayavi mlab.points3d进行动画制作

问题描述 投票:0回答:1

大家好我想尝试使用Mayavi mlab.points3d动画一些数据并遇到一些问题。这是我的代码:

import numpy as np
from mayavi import mlab

##Some lists to animate
px=np.arange(0,10000,1)
py=np.arange(0,50000,5)

##Animation function
def run(px,py):
        cc = mlab.gcf().scene.camera
        cc.position[-1] = 10
        T_max = len(px)
        delayer=40
        @mlab.animate(delay=delayer)
        def anim_loc():
            f = mlab.gcf()
            while True:
                for i in np.arange(0,T_max,1):
                    s=0.5
                    mlab.points3d(px[i],py[i],s,color=(0,0,0),opacity=1)
                    mlab.view(distance=50,azimuth=80,elevation=80)
                    print(px[i],py[i])
                    yield

        b=anim_loc()
run(px,py)
mlab.show()

当我执行此代码时,动画只持续40帧左右,然后冻结没有任何错误或异常。当我多次运行动画时,动画在不同的帧处冻结,有时在20帧之后,有时甚至在80帧之后。我在此不确定是因为我编写的代码,还是我使用的计算机(应该足够快速执行此类任务),或者它是Mayavi中的错误。我正在使用带有anaconda导航器的spyder 3.2.8。我会很高兴任何帮助:)。

python animation mayavi mayavi.mlab
1个回答
0
投票

您必须更改@mlab.animated函数中的数据源中的数据。你正在调用绘图仪功能。

这是您的示例的简化版本:

import numpy
from mayavi import mlab


# data
px=numpy.arange(0,10000,1)
py=numpy.arange(0,50000,5)
pz=numpy.zeros_like(px)
s=0.5
# render
pts=mlab.points3d(px,py,pz)
T_max = len(px)
delayer=40
@mlab.animate(delay=delayer)
def anim_loc():
    for i in numpy.arange(2, T_max,500):
        _x = px[0:i]
        _y = px[0:i]
        _z = pz[0:i]
        pts.mlab_source.reset( x = _x, y = _y, z = _z, )
        yield

anim_loc()
mlab.show()
© www.soinside.com 2019 - 2024. All rights reserved.