添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

我需要在屏幕上画一些形状,使用 淘宝网 . I chose 淘宝网 over 矩阵图(matplotlib 因为在有很多形状的情况下,前者要快得多。 对于直线多边形来说,一切都很好,因为我可以简单地绘制多条直线。 但是,我怎样才能有效地表示一个弧线呢?

I found out here link 该函数 淘宝网.QtGui.QGraphicsEllipseItem() 允许我画一个完整的椭圆。 但如果我只需要该椭圆的一个弧线呢?

python
pyqtgraph
crazydecibel
crazydecibel
发布于 2022-04-29
2 个回答
ymmx
ymmx
发布于 2022-04-29
已采纳
0 人赞同

这里有一个解决方案,你可以输入两个角度(度)和一个弧线方向(顺时针或逆时针)。你还可以输入半径。为了平移弧线,你可以在X和Y轴上添加两个标量。

import pyqtgraph as pg
import numpy as np
from pyqtgraph.Qt import QtCore, QtGui
def Get_Points(r, a1, a2, nbPoints,clockwise=True):
    a1_rad = np.radians(a1)
    if a1_rad <0:
        a1_rad += 2 * np.pi
    a2_rad = np.radians(a2)
    if a2_rad <0:
        a2_rad += 2 * np.pi
    if a1_rad > a2_rad:
        if clockwise:
            t= np.linspace( a1_rad,a2_rad, nbPoints)
        else:
            t = np.linspace(a2_rad, a1_rad - 2 * np.pi,nbPoints)
    else:
        if clockwise:
            t= np.linspace(a2_rad, a1_rad,nbPoints)
        else:
            t = np.linspace(a1_rad, a2_rad - 2 * np.pi, nbPoints)
    x = r * np.cos(t)
    y = r * np.sin(t)
    return x, y
win = pg.GraphicsLayoutWidget(show=True, title="Plotting")
win.setFixedSize(500, 500)
p = win.addPlot(title='')
r = 10
a1 = 80
a2 = -200
x,y = Get_Points(r, a1, a2, 1000,clockwise=True)
c = pg.PlotCurveItem(x,y,cl=True)
p.setXRange(-1.5 * r, 1.5 * r, padding=0)
p.setYRange(-1.5 * r, 1.5 * r, padding=0)
p.addItem(c)
if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()
    
这是一个更完整的解决方案,而且效果很好。谢谢你!
ymmx
ymmx
发布于 2022-04-29
0 人赞同

你可以计算弧线上一些点的位置,并用 PlotCurveItem 来显示它们。

import pyqtgraph as pg
import numpy as np
from pyqtgraph.Qt import QtCore, QtGui
t= np.arange(0,5*2*np.pi/6 ,0.01)
x = np.sin(t+0.5)
y = np.cos(t+0.5)
win = pg.GraphicsLayoutWidget(show=True, title="Plotting")
win.setFixedSize(500, 500)
p = win.addPlot(title='')
p.setXRange(-1.5, 1.5, padding=0)
p.setYRange(-1.5, 1.5, padding=0)
c = pg.PlotCurveItem(x,y)
p.addItem(c)
if __name__ == '__main__':