我有一个复杂的算法,可以更新存储在数组中的3个直方图.我想调试我的算法,所以我想在用户界面中将数组显示为直方图.最简单的方法是什么?(快速应用程序开发比优化代码更重要.)
我有一些Qt(在C++中)的经验和matplotlib的一些经验.
(我将暂时搁置这个问题一两天,因为我很难在没有更多经验的情况下评估解决方案.希望社群的投票能帮助我们选择最佳答案.)
我不知道如何从屏幕坐标到世界坐标.我正在使用VisPy,我想在3D中实现光线跟踪和拾取能力.
我根据立方体示例准备了一些代码.下面的代码通过更改z值并在''on_mouse_press''方法中打印3D坐标来通过屏幕发送粗糙的光线.但结果不正确.如果我点击立方体的右上角,沿着光线的某个地方应该打印(3,3,3),但事实并非如此.任何人都可以帮我吗?
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# vispy: gallery 50
"""
This example shows how to display 3D objects.
You should see a colored outlined spinning cube.
"""
import numpy as np
from vispy import app, gloo
from vispy.util.transforms import perspective, translate, rotate
vert = """
// Uniforms
// ------------------------------------
uniform mat4 u_model;
uniform mat4 u_view;
uniform mat4 u_projection;
uniform vec4 u_color;
// Attributes
// ------------------------------------
attribute vec3 a_position;
attribute vec4 a_color;
attribute vec3 a_normal;
// Varying …Run Code Online (Sandbox Code Playgroud) 我想知道使用 VisPy是否有可能,或者我是否应该开始寻找其他替代方案。
这是发生了什么 - 我正在写一篇关于狭义相对论的一些类似悖论的情况的本科论文。我所做的基本上就是这样,我将在 python 中使用一些脚本生成有序三元组(3D 空间中的点)的数组,这些数组随时间变量(“时间变量”实际上是速度,但它会计数)就像时间一样)。我需要对这些点进行动画处理,在更简单的情况下,它们将形成棒、2D 方块和 3D 立方体,当然还会生成 .gif 或类似的文件。
编码绝对不是我的强项,但我已经使用 Python 有一段时间了。我已经研究过 VisPy 并且喜欢它使用 OpenGL 功能,并且通常喜欢各种示例的好坏(我可以开始工作)。
我的问题是: VisPy 是我需要做的最好的事情吗?我很难弄清楚如何让 VisPy 将单个点制作成 3D 对象等等 - 我已经玩过各种 Geometry 东西,比如 create_cube,但看起来我不能只移动周围的顶点。
如果有人对从哪里开始有任何建议,或者 Mayavi 或其他事情是否更容易,请告诉我。
更新:我确实想出了如何制作一个非常漂亮(且简单)的 3D 立方体轮廓,这正是我想要的。我仍然不确定如何让它动画,因为使用 VisPy 制作动画的例子大不相同。
有没有人有任何方向?在代码中,需要发生的是初始点数组需要更新每一帧(点可以在脚本中导入或计算,无论哪种方式)
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], …Run Code Online (Sandbox Code Playgroud) 从 examples/basics/visuals/graphy.py 开始,我尝试显示直方图但失败了:
from vispy import app, visuals
import wx
import numpy as np
class snrHistogram(app.Canvas):
def __init__(self, *args, **kwargs):
app.Canvas.__init__(self, title='histogram fail',
keys="interactive", size=(600, 600))
self.snr_hist = visuals.HistogramVisual(np.arange(256), bins=4, color='r', orientation='v')
self.label = visuals.TextVisual("hi", color='blue', pos=[50, 50, 0])
self.configure_transforms()
self.show()
def configure_transforms(self):
vp = (0, 0, self.physical_size[0], self.physical_size[1])
self.context.set_viewport(*vp)
self.label.transforms.configure(canvas=self, viewport=vp)
self.snr_hist.transforms.configure(canvas=self, viewport=vp)
def on_resize(self, event):
self.configure_transforms()
def on_mouse_wheel(self, event):
self.update()
def on_draw(self, event):
self.snr_hist.draw()
self.label.draw()
self.update()
def on_close(self, event):
self.close()
if __name__ == '__main__':
s = snrHistogram()
app.run() …Run Code Online (Sandbox Code Playgroud) 我试图将一个vispy情节(更具体地说,一个Vispy SceneCanvas)作为QWidget嵌入到PyQt4中.我认为答案是这样的:
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import vispy.mpl_plot as plt
app = QApplication(sys.argv)
win = QMainWindow()
plt.plot([1,2,3,4], [1,4,9,16])
vispyCanvas=plt.show()[0]
win.setCentralWidget(vispyCanvas)
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试这个时,最后一行给出了vispyCanvas类型SceneCanvas而不是类型的预期错误QWidget.当我print(vispyCanvas),它打印出来<Vispy canvas (PyQt4 (qt) backend) at 0x142bcb00L>,这就是为什么我怀疑应该可以将它或它的一个属性作为QWidget对象处理.
在vispy库中,我有一个显示为标记的点列表,我想更改最接近单击点的点的颜色(或仅获取其索引)。
我可以通过 event.pos 获取点击点的像素,但我需要它的实际坐标将其与其他坐标进行比较(或获取其他标记的像素点以将其与事件位置进行比较)。
我有这段代码来获取最近的点索引。它接受数组和点的输入(单击一个)
def get_nearest_index(pos,p0):
count=0
col =[(1,1,1,0.5) for i in pos]
dist= math.inf
ind=0
for i in range(len(pos)):
d = (pos[i][0]-p0[0])**2+(pos[i][1]-p0[1])**2
if d<dist:
ind=i
dist=d
return ind
Run Code Online (Sandbox Code Playgroud)
但问题是我必须在同一坐标系中传递它们。打印出来event.pos返回像素,例如:[319 313]而我的位置在pos数组中是:
[[-0.23801816 0.55117583 -0.56644607]
[-0.91117247 -2.28957391 -1.3636486 ]
[-1.81229627 0.50565064 -0.06175591]
[-1.79744952 0.48388072 -0.00389405]
[ 0.33729051 -0.4087148 0.57522977]]
Run Code Online (Sandbox Code Playgroud)
所以我需要将其中一个转换为另一个。变换就像
tf = view.scene.transform
p0 = tf.map(pixel_pt)
print(str(pixel_pt) + "--->"+str(p0))
Run Code Online (Sandbox Code Playgroud)
打印出来[285 140 0 1]--->[ 4.44178173e+04 -1.60156369e+04 0.00000000e+00 1.00000000e+00]的内容与点相差甚远。
我是 VisPy 的初学者。
我想做的就是:
单击该点,该点将改变颜色并打印该点的位置 (x,y,z)。
但我找不到如何做到这一点。
这是我的代码。
import numpy as np
import sys
from vispy import app, visuals, scene
class Canvas(scene.SceneCanvas):
""" A simple test canvas for testing the EditLineVisual """
def __init__(self):
scene.SceneCanvas.__init__(self, keys='interactive',
size=(800, 800), show=True)
# # Create some initial points
self.unfreeze()
# Add a ViewBox to let the user zoom/rotate
self.view = self.central_widget.add_view()
self.view.camera = 'turntable'
self.view.camera.fov = 30
self.show()
self.selected_point = None
scene.visuals.GridLines(parent=self.view.scene)
self.freeze()
def on_mouse_press(self, event):
print(event.pos) # How to convert this pos …Run Code Online (Sandbox Code Playgroud) 我在anaconda python上使用ipython notebook但我不知道如何安装或导入opengl.谁能帮我解决这个问题?我在linux xubuntu上使用anaconda.抱歉英文不好.
嘿,我想在pyqt5生成的Gui中嵌入vispy canvas的输出窗口。我对vispy不太了解,因此请事先帮助。
是否可以保存使用VisPy制作的图像?也许使用vispy.io.imsave或vispy.write_png?
此外,可以使用vispy.mpl_plot在vispy中绘制matplotlib数字,但是可以在matplotlib中使用vispy图像吗?
在任何情况下,我都需要使用VisPy生成一个图像对象,但我没有找到任何示例.
由于服务器GPU限制,我们无法使用 K 渲染 上的隐式方程VPS,下面是我们用来从 中的方程生成 3D 模型的示例代码mayavi:
import numpy as np
from mayavi import mlab
mlab.clf()
x, y, z = np.mgrid[-2.5:2.5:.125, -2.5:2.5:.125, -2.5:2.5:.125]
a,b,c = 0.0,-5.0,11.8
values = x**4+y**4+z**4+a*(x**2+y**2+z**2)**2+b*(x**2+y**2+z**2)+c
mlab.contour3d(x, y, z, values, contours=[0], color=(.1,1,.5))
mlab.savefig("shape.obj")
Run Code Online (Sandbox Code Playgroud)
以 3D 形式输出此形状
我的问题是,我怎样才能完成同样的事情vispy另一个 python 模块(如果存在)完成同样的事情
我们没有显卡VPS,我们在 Windows Server 2008 上使用 python 3.5.1 (anaconda)(不可能使用 linux),并且我们已替换opengl32.dll为 system32 中的 mesa(GL 版本 3.0 mesa 10.2.8)(VTK 抛出错误 GL 版本 2.1 及其gpu_shader4扩展不受支持...)
vispy ×11
python ×10
3d ×3
mayavi ×2
pyqt ×2
python-3.x ×2
anaconda ×1
animation ×1
linux ×1
matplotlib ×1
numpy ×1
plot ×1
pyopengl ×1
pyqt4 ×1
pyqt5 ×1
pyside ×1
python-2.7 ×1
scatter ×1
simulation ×1