python - 如何使用OpenGL和Python通过(XYZ)坐标绘制折线
问题描述
我需要使用基于 (X,Y,Z) 坐标的 Python 的 OpenGl 绘制 3D 折线。而不是 numpy 行空间(类似这样):
import pyqtgraph.opengl as gl
import numpy as np
w = gl.GLViewWidget()
y = np.linspace(1,3,3)
x = np.linspace(1,3,3)
pts = (x,y)
sh1 = gl.GLLinePlotItem(pos=pts, width=1, antialias=False)
w.addItem(sh1)
我想要更直接的东西,我可以将线坐标定义为线的实际(起点和终点坐标)。更像这样(伪代码):
import pyqtgraph.opengl as gl
import numpy as np
w = gl.GLViewWidget()
xx = 10
yx = 11
zx = 10
xy = 20
yy = 21
zy = 20
Xdot = (xx,yx,zx)
Ydot = (xy,yy,zy)
pts = (Xdot,Ydot)
sh1 = gl.GLLinePlotItem(pos=pts, width=1, antialias=False)
w.addItem(sh1)
所以,在这里我展示了 3D 空间中一条线的起点和终点。但显然,它不起作用,如何以伪代码中正确描述的方式实现这一点?
解决方案
我改变了坐标,所以你从一开始就看到了这条线。我还添加了QApplication
, 使其独立。
import pyqtgraph.opengl as gl
from pyqtgraph.Qt import QtWidgets
import numpy as np
import sys
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = gl.GLViewWidget()
xx = 0
yx = 0
zx = 0
xy = 1
yy = 0
zy = 0
Xdot = (xx, yx, zx)
Ydot = (xy, yy, zy)
pts = np.array([Xdot, Ydot])
sh1 = gl.GLLinePlotItem(pos=pts, width=1, antialias=False)
w.addItem(sh1)
w.show()
app.exec()
您可以通过以下方式添加更多细分
Zdot = (1, 1, 1)
pts = np.array([Xdot, Ydot, Zdot])
设置中心(相机旋转的点):
from pyqtgraph import Vector
w.opts['center'] = Vector(0,0,10)
要设置位置(相对于该中心,仰角和方位角是以度为单位的角度):
w.setCameraPosition(distance=10, elevation=42, azimuth=42)
要锁定位置,您应该从 GLViewWidget 继承并重载mouseMoveEvent
和wheelEvent
. 肮脏的方式是这样的:
def empty(ev):
return None
w.mouseMoveEvent = empty
w.wheelEvent = empty
您定义一个空函数并将鼠标输入事件设置为该函数。
推荐阅读
- ios - 异常“NSInvalidArgumentException”,原因:“-[MedicalDevice setPrice:]:无法识别的选择器发送到实例 0x2818cc3c0”
- ios - 绘制圆线iOS Swift
- sql - Is there a way to create contents of the schema into a Table in BigQuery?
- functional-programming - 非终止函数有类型吗?
- python - 我在为 vscode 的烧瓶环境中设置 libsass、pysass 和资产模块时遇到了一些问题
- python - 如何在python中计算文本文件中的最后一个字符
- php - Using url parameter in route to use in conditional
- css - Full width non responsive CSS for mobile only and only on Woocommerce single pages
- django - Django - 通过 Google API 转换经纬度地址并保存对象
- python - 检查多个正则表达式模式