QPainterPathを使用して、グラフ(パス)を作成して描画しましたが、対応するyポイントを取得するには、特定のxポイントでグラフ(パス)をクエリする必要があります。
私はそれを行う方法を理解できませんでした。
知恵をコーディングする人はいますか?
QPainterPathを使用して、グラフ(パス)を作成して描画しましたが、対応するyポイントを取得するには、特定のxポイントでグラフ(パス)をクエリする必要があります。
私はそれを行う方法を理解できませんでした。
知恵をコーディングする人はいますか?
もう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
ループを使用します。
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に対して1つのY値を持つことが保証されている場合は、QPainterPathを白黒のQImageに(QPainterとして)レンダリングし、の各行をスキャンすることで近似できます。ピクセルXがマークされている行を見つけるための画像。精度は、画像の大きさに依存します。完璧ではありませんが、近所に行くはずです。:)