首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VisPy动画点对点来自NumPy数组

VisPy动画点对点来自NumPy数组
EN

Stack Overflow用户
提问于 2017-12-25 16:09:38
回答 1查看 1.8K关注 0票数 6

我想知道是否有可能使用VisPy,或者我是否应该开始寻找其他的替代方案。

这是怎么回事--我正在写一篇关于一些悖论的本科生论文,比如特殊相对论的情形。我所做的基本上是这样的,我将在python中使用一些脚本来生成有序三重奏数组( 3D空间中的点),它们会随着时间的变化而变化( "time like“变量实际上是速度,但它将依赖于时间)。我需要动画这些点,在更简单的情况下,将形成棒,二维方块,三维立方体,当然,产生.gif或类似的。

编码绝对不是我的强项,但我已经使用Python一段时间了。我研究过VisPy,喜欢它使用OpenGL功能,一般都喜欢各种示例(我可以使用)。

我的问题是:是我需要做的最好的事情吗?我很难弄清楚如何让VisPy把单个点变成3D物体之类的--我玩过像create_cube这样的几何学的东西,但是它看上去不像我能移动周围的顶点。

如果有人对从哪里开始有任何建议,或者马亚维或其他事情会更容易,请告诉我。

更新:,我想出了如何制作一个非常好(简单)的三维立方体轮廓,这正是我想要的。我仍然不知道如何使它动画,因为使用VisPy动画的例子是完全不同的。

有人有方向吗?在代码中,需要发生的是,初始的点数组需要更新每个帧(无论哪种方式,都可以在脚本中导入或计算点)。

代码语言:javascript
复制
import numpy as np
import vispy
import vispy.scene
from vispy.scene import visuals
from vispy import app

canvas = vispy.scene.SceneCanvas(keys='interactive', show=True)
view = canvas.central_widget.add_view()

# generate data
pos = np.array([[0, 0, 0], [0.5, 0.5, 0.5], [0, 0.5, 0.5], [0.5, 0, 0.5],
                [0.5, 0.5, 0], [0, 0, 0.5], [0, 0.5, 0], [0.5, 0, 0]])
# These are the data that need to be updated each frame --^

scatter = visuals.Markers()
scatter.set_data(pos, edge_color=None, face_color=(1, 1, 1, .5), size=10)
view.add(scatter)

view.camera = 'turntable'

# just makes the axes
axis = visuals.XYZAxis(parent=view.scene)

if __name__ == '__main__':
    import sys
    if sys.flags.interactive != 1:
        vispy.app.run()
EN

回答 1

Stack Overflow用户

发布于 2018-04-05 18:56:20

我也有同样的问题,但我想找个解决办法。我检查了Vispy API并修改了代码,它运行得很好。希望这对你和其他人都有帮助。

代码语言:javascript
复制
import numpy as np
import vispy
import vispy.scene
from vispy.scene import visuals
from vispy import app

canvas = vispy.scene.SceneCanvas(keys='interactive', show=True)
view = canvas.central_widget.add_view()
view.camera = 'turntable'
# generate data
def solver(t):
    pos = np.array([[0.5 + t/10000, 0.5, 0], [0, 0, 0.5], [0, 0.5, 0], [0.5, 0, 0]])
    return pos
# These are the data that need to be updated each frame --^

scatter = visuals.Markers()
view.add(scatter)


#view.camera = scene.TurntableCamera(up='z')

# just makes the axes
axis = visuals.XYZAxis(parent=view.scene)


t = 0.0
def update(ev):
    global scatter
    global t
    t += 1.0
    scatter.set_data(solver(t), edge_color=None, face_color=(1, 1, 1, .5), size=10)

timer = app.Timer()
timer.connect(update)
timer.start(0)
if __name__ == '__main__':
    canvas.show()
    if sys.flags.interactive == 0:
        app.run()
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47970212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档