大家好,我正在尝试使用 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。如果有任何帮助:),我将非常高兴。
您必须更改@mlab.animate
d 函数中源中的数据。您正在调用绘图仪函数。
下面是示例的简化版本:
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()