2

使用 QPainterPath,我已经构建了一个图形(路径)并绘制了它,但是现在我需要在某个 x 点处查询图形(路径)以获得相应的 y 点。

我想不出办法。

编码智慧有人吗?

4

3 回答 3

5

另一种解决方案是QPainterPath通过将其转换为一个/多个来获得所有点,QPolygonF这可以像这样轻松完成:

QPainterPath path(QPointF(0,0));
path.lineTo(QPointF(100,0));
path.lineTo(QPointF(100,100));
path.lineTo(QPointF(0,100));
path.lineTo(QPointF(0,0)); 
//change this to toSubpathPolygons to get multiple polygons.
QPolygonF polygon = path.toFillPolygon();
QList<QLineF> edgeList;
for(int i=0;i < polygon.count(); i++) {
     QLineF edge;
     if(i != (polygon.count() - 1)) {
         edge.setPoints(polygon.at(i),polygon.at(i+1));
     } else {
         edge.setPoints(polygon.at(i),polygon.at(0));
     }
         edgeList<<edge;
 }

然后您可以使用扫描线检查与这些边缘的交点。使用 intersect 函数 fromQLineF和另一个foreach循环。

于 2014-01-08T09:26:33.737 回答
3
QPainterPath p = item->path();
for(int i = 0; i < p.elementCount(); i++)
{
    QPointF pt = p.elementAt(i); //get the value of the point at index i
    p.setElementPositionAt(i, new_x, new_y); //change the value of the point at index i
}
于 2017-02-06T12:55:58.790 回答
0

QPainterPath 没有任何数学函数来计算/求解它作为一个方程,因为它不是一个方程。路径的绘制实际上是特定于绘制引擎的。简而言之,QPainterPath 是一个绘图对象,甚至不是绘图对象。

到达你想去的地方的正确方法是用你自己的数学自己画曲线。

但是,如果您可以以有限的精度生活,并且如果您的路径保证对任何可能的 X 具有一个 Y 值,那么您可以通过将 QPainterPath 渲染到黑白 QImage(作为 QPainter)上并扫描每一行来近似它图像以查找标记了像素 X 的行。精度将取决于图像的大小。不完美,但它应该让你到附近。:)

于 2012-07-29T02:31:15.523 回答