Анимация с помощью 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()