【问题标题】:Drawing Arcs in Pyside在 Pyside 中绘制圆弧
【发布时间】:2014-03-28 00:09:53
【问题描述】:

我正在尝试在圆圈上绘制小部件,为此我需要将小部件绘制为弧形。我知道小部件的数量(比方说),然后每个小部件从原点到圆周呈 36 度角。我拥有的信息是圆心、半径,并且我知道每个此类小部件的圆周上的起点和终点。

这是通过做来计算的

    dx = int(round(400 + 300 * np.cos(angle)))
    dy = int(round(400 + 300 * np.sin(angle)))

angle = 2 * np.pi / 15 我通过一个 for 循环计算角度的新值,它基本上是角度 * i 其中 i = (1, 10)

我不明白 QPainter.QPainter Arc 中 arcs 函数的起始角度和跨度角度。我用谷歌搜索并没有很多术语出现。也许他们有不同的称呼。

所以问题是我在圆周、中心和半径上有一个起点和终点,我如何使用它们来绘制弧,这样我得到的东西看起来像:

circos

我试过的是,我可以计算两个端点的中心点(cx),如果我从圆心到这个点 cx 画一条线,那么我可以计算这个点的圆周有多远本质上是我的宽度,但是如何使方向正确以将它们表示为圆圈。

我确实有一个只有这样的线条的布局,而不是圆形,但希望像马戏团一样。 My image

【问题讨论】:

    标签: python algorithm qt geometry pyside


    【解决方案1】:

    我不明白 QPainter.QPainter Arc 中 arcs 函数的起始角度和跨度角度。

    为什么?恕我直言,文档非常清楚:

    startAngle 和 spanAngle 必须指定为 1/16 度,即一个完整的圆等于 5760 (16 * 360)。

    这意味着您的单位是 1/16º。例如。 45º 是 45*16 单位。

    角度的正值表示逆时针方向,负值表示顺时针方向。零度在 3 点钟的位置。”

    这意味着 90*16 点在 12 点钟方向(从 3 点钟方向逆时针旋转 90º),-90*16 点在 6 点钟方向。

    当然,“零”度只对起始角度有意义。跨度角表示圆弧会走多远,以及朝哪个方向。

    例如,要从 3 点到 12 点画一条弧线,你会这样做

    painter.drawArc(rect, 0, 90*16)
    *or*
    painter.drawArc(rect, 90*16, -90*16)
    

    但是要从 3 点到 6 点画一条弧线,你会这样做

    painter.drawArc(rect, 0, -90*16)
    *or*
    painter.drawArc(rect, -90*16, 90*16)
    

    弧不是使用中心和半径指定的,而是使用边界矩形。如果圆弧是一个完整的椭圆,它将内接在矩形中 - 这些圆弧是隐含的椭圆圆弧。

    因此,给定xy 中心点,r 为圆半径,边界矩形为

    rect = QRect(x-r, y-r, 2*r, 2*r)
    

    【讨论】:

    • 库巴,非常感谢您的回复。我没有掌握起始角度和跨度角度是什么。我试图将它们连接到弧长和扇区的角度,这可能是我做错的地方。同样对于矩形坐标,您是否使用圆的中心和半径,因为这将使边界矩形从中心定向。如果您对中心点有其他意思,请告诉我
    • @gizgok 边界矩形的中心点应该在矩形对角线的交点处,这就是我编写的代码。该中心点与内切圆的中心点重合。
    • 那么这个中心点会是圆弧上的点之一吗?我尝试的是在我想要的位置构建矩形,但可能我没有正确。
    • @gizgok 注意含义上的差异:中心点不是中点!你似乎混淆了这两者。非整圆的圆弧同时具有中心点和中点,如果圆弧具有非零半径,则它们永远不会重合。中心点不在圆弧上。中点 - 是。圆是圆弧的一种特殊情况,它不再有中点,只有中心点。
    • 但我不知道矩形的其他端点得到对角线。我想我可以通过构造线的线性方程来计算它们。您对如何计算它们有任何指示吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多