2013-01-11 30 views
9

मैं कणों के प्रक्षेपणों का एक वीडियो बनाने की कोशिश कर रहा हूं। हालांकि, किसी भी तरह से मेरा दृश्य कभी अपडेट नहीं होता है। यहाँ एक बहुत ही सरल उदाहरण है:एक माया पॉइंट 3 डी प्लॉट एनीमेशन

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.7, मायावी 4.1, VTK 5.8

+0

मैं मायावी का उपयोग करने के लिए भी नया हूं - क्या आपने प्रत्येक चक्र को आंकड़ा साफ़ करने के लिए mlab.clf (figure = mayavi_scene) का उपयोग करने का प्रयास किया है? – Griff

उत्तर

8

बस के लिए बदल जाते हैं।

इसके बाद से आपके डेटा के shape बदलते नहीं हैं तो आपको mlab_source.reset का उपयोग करने की आवश्यकता नहीं है।

मैंने भी परीक्षण किया और ठीक काम करता है।

1

आप mlab_source.reset की कोशिश की? यह तब भी काम करता है जब एक्स, वाई, और जेड सरणी की लंबाई बदल जाती है।

आपके मामले में, यह होगा: plt.mlab_source.reset(x=x,y=y,z=z)। करने के लिए documentationmlab_source.set ताज़ा की गारंटी देता है अनुसार

...

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() जरूरत नहीं है,: