2

QPainterPathを使用して、グラフ(パス)を作成して描画しましたが、対応するyポイントを取得するには、特定のxポイントでグラフ(パス)をクエリする必要があります。

私はそれを行う方法を理解できませんでした。

知恵をコーディングする人はいますか?

4

3 に答える 3

5

もう1つの解決策は、のすべてのポイントQPainterPathを1つまたは複数に変換して取得する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;
 }

次に、スキャンラインを使用して、これらのエッジとの交点を確認できます。からの交差関数QLineFと別の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に対して1つのY値を持つことが保証されている場合は、QPainterPathを白黒のQImageに(QPainterとして)レンダリングし、の各行をスキャンすることで近似できます。ピクセルXがマークされている行を見つけるための画像。精度は、画像の大きさに依存します。完璧ではありませんが、近所に行くはずです。:)

于 2012-07-29T02:31:15.523 に答える