Extraer puntos de una ruta

Usando QPainterPath, construí un gráfico (ruta), lo dibujé, pero ahora necesito consultar el gráfico (ruta) en ciertos puntos x para obtener los puntos y correspondientes.

No pude encontrar una manera de hacerlo.

Sabiduría de codificación a alguien?

preguntado el 28 de julio de 12 a las 09:07

¿Qué es exactamente lo que quiere hacer? -

Donotalo, necesito cambiar los niveles de intensidad de una imagen según el gráfico curvo de intensidad personalizado. -

Parece que desea definir una función de interpolación, basada en algunos puntos de control (¿arrastrables?). Esto no es realmente lo mismo que construir una ruta, por lo que es posible que desee utilizar una biblioteca adicional para, por ejemplo, la interpolación spline cúbica de los puntos que proporcione. ¿Has probado una interpolación lineal simple? ¿Podría esto ser suficiente para lo que estás haciendo con tu imagen? -

3 Respuestas

Otra solución es obtener todos los puntos de la QPainterPath convirtiéndolo en uno/múltiple QPolygonF esto se puede hacer fácilmente así:

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;
 }

Luego puede usar una línea de escaneo para verificar la intersección con estos bordes. utilizando la función de intersección de QLineF y otro foreach lazo.

Respondido el 08 de enero de 14 a las 09:01

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
}

Respondido el 25 de Septiembre de 19 a las 10:09

Si bien este código puede responder a la pregunta, proporcionar un contexto adicional sobre por qué y / o cómo este código responde a la pregunta mejora su valor a largo plazo. - Pato Donald

QPainterPath no tiene ninguna función matemática para calcularlo/resolverlo como una ecuación ya que, para empezar, no es una ecuación. El dibujo de una ruta es en realidad específico del motor de pintura. En pocas palabras, QPainterPath es un objeto de dibujo, ni siquiera de gráficos.

La forma correcta de llegar a donde quieres ir es dibujar la curva tú mismo con tus propias matemáticas.

Pero si puede vivir con una precisión limitada y si se garantiza que su ruta tenga un valor Y para cualquier X posible, entonces puede aproximarla renderizando el QPainterPath en una QImage en blanco y negro (como un QPainter) y escaneando cada línea en la imagen para encontrar qué línea tiene el píxel X marcado. La precisión dependerá del tamaño de la imagen. No es perfecto, pero debería llevarte al vecindario. :)

Respondido 29 Jul 12, 03:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.