Анимация с помощью Mayavi mlab.points3d

Привет всем, я пытаюсь оживить некоторые данные, используя 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. Я использую Spyder 3.2.8 с Anaconda Navigator. Я был бы очень рад за любую помощь:).

1 ответ

Вы должны изменить данные в источниках в вашем @mlab.animateд функция. Вместо этого вы вызываете функцию плоттера.

Вот уменьшенная версия вашего примера:

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()
Другие вопросы по тегам