12

粒子の軌跡のビデオを作ろうとしています。しかし、どういうわけか私のシーンは更新されません。非常に簡単な例を次に示します。

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()

このスクリプトを実行すると、2つのポイントとアニメーションGUIを備えたウィンドウが表示されます。また、端末に「UpdatingScene...」メッセージの連続ストリームを出力します。ただし、シーンにはまったく動きが見られません。

私は何が間違っているのですか?

Python 2.7、Mayavi 4.1、VTK 5.8

4

2 に答える 2

11

次のように変更します。

...

    for (x, y, z) in zip(xs, ys, zs):
        print('Updating scene...')
        plt.mlab_source.set(x=x, y=y, z=z)
        yield

...

ドキュメントf.scene.render()によると、更新は 必要ありません。 mlab_source.set

また、shapeデータは変更されないため、使用する必要はありませんmlab_source.reset

私もテストし、正常に動作します。

于 2013-10-26T01:05:45.110 に答える
1

mlab_source.reset を試しましたか? x、y、および z 配列の長さが変更された場合でも機能します。

あなたの場合、次のようになります plt.mlab_source.reset(x=x,y=y,z=z)

于 2013-01-30T21:54:17.167 に答える