使用 QPainterPath,我已经构建了一个图形(路径)并绘制了它,但是现在我需要在某个 x 点处查询图形(路径)以获得相应的 y 点。
我想不出办法。
编码智慧有人吗?
另一种解决方案是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
循环。
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
}
QPainterPath 没有任何数学函数来计算/求解它作为一个方程,因为它不是一个方程。路径的绘制实际上是特定于绘制引擎的。简而言之,QPainterPath 是一个绘图对象,甚至不是绘图对象。
到达你想去的地方的正确方法是用你自己的数学自己画曲线。
但是,如果您可以以有限的精度生活,并且如果您的路径保证对任何可能的 X 具有一个 Y 值,那么您可以通过将 QPainterPath 渲染到黑白 QImage(作为 QPainter)上并扫描每一行来近似它图像以查找标记了像素 X 的行。精度将取决于图像的大小。不完美,但它应该让你到附近。:)