当前位置: 首页 > 面试题库 >

制作Mayavi Points3D绘图动画

方宜
2023-03-14
问题内容

我正在尝试制作粒子轨迹的视频。但是,我的场景以某种方式从未更新过。这是一个非常简单的示例:

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

如果运行此脚本,它将显示一个包含两个点和动画GUI的窗口。它还在终端上打印连续的“正在更新场景…”消息流。但是,场景根本不显示任何运动。

我究竟做错了什么?

Python 2.7,Mayavi 4.1,VTK 5.8


问题答案:

只需更改为:

    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

我也测试过并且工作正常。



 类似资料:
  • 操作步骤: ①以编辑状态进入地图,点击左侧图例面板中要使用的图层,所选图层的边缘显示为蓝色,表示新添加的记录将绘制在此图层上。例如:选择标注图层。 ②点击地图右上方工具栏上"添加标注"按钮。 ③在地图上,将鼠标移到想要添加标注的位置,点击一下,放置标注即可。 ④在弹出的信息窗中,填写标题及其他说明信息。 ⑤点击信息窗口右下角的"完成"图标以完成添加。 提示 ●区域和线路需双击鼠标左键结束绘制。 操

  • 本文向大家介绍Android绘制动态折线图,包括了Android绘制动态折线图的使用技巧和注意事项,需要的朋友参考一下 所谓动态折线图,就是折线图能随着手指的滑动进行动态绘制,这里很定会产生动画效果。基于这个效果,这里使用SurfaceView进行制图。 实现步奏如下: (1): 这里新建一个绘图ChartView,继承SurfaceView并实现SurfaceHolder.Callback ,

  • 问题内容: 我想只使用具有svg / canvas和jsmax的css来动画化线条的渐进绘图。我想画的线的想法可以在这里找到 问题答案: 此答案中列出了三种技术: 有一个全SVG解决方案,涉及逐步修改形状以绘制越来越长的“破折号”,然后是巨大的空白。 演示:[http](http://phrogz.net/svg/progressively-drawing-svg-path-via- dashar

  • 虽然canvas的API并未直接提供支持动画的方法,但就其本身而言,在canvas中实现动画效果也很简单:只需要持续的更新并重绘画布就行了。这种持续的更新并重绘就叫做动画循环,它是所有动画的核心逻辑。 在canvas中实现动画,首先需要初始化画布上的对象。然后,启动一个动画循环来更新画布、清除画布、重绘画布,再请求下一个新的动画帧。Canvas动画的基本原理如图 4‑36 所示: 图4-36 ca

  • 除了绘制矢量图形和文本之外,canvas还提供了极为丰富的图像支持。开发者可以选择绘制某幅图像的全部或某个部分,在绘制时可以进行缩放或保持原样,可以把图像绘制到画布的任何地方。同时,还允许开发人员直接访问画布的像素数据。数据访问是双向的,既可以获取画布中的像素数据,也可以把像素重新绘制到画布中。 Canvas的API提供了如下4个用于绘制及操作图像的方法: drawImage():把图像、或另一个

  • 通过绘制一幅简单的图像,让我们直奔主题。本节,我们将学习如何加载一幅图像,并把它绘制到画布的某个地方。 图3-1 绘制图像 绘制步骤 按照以下步骤,在画布中央绘制一幅图像: 1. 定义画布上下文: window.onload  = function(){ var canvas  = document.getElementById("myCanvas"); var context  = c