es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo hacer una interfaz gráfica de usuario (GUI) que traza una función ingresada por el usuario (x).

Estoy desarrollando un programa que toma una función de x del usuario, así como los valores mínimos y máximos de x, luego el programa tiene que trazar esta función.
Por ejemplo:

La función ingresada por el usuario es: x^2+2x-1
El valor máximo de x es: 3
El valor mínimo de x es: -3

Ahora la interfaz gráfica debe mostrar (si la función ingresada no tiene errores, de lo contrario se mostrará el error al usuario) algo similar a esta imagen: enlace a la imagen

La función ingresada también puede ser un poco compleja, por ejemplo: (sin(x), cos(2*x+1), etc.)

Estoy intentando hacer este trabajo con C++ y QT, así que cualquier consejo sobre cómo hacer la parte de trazado del programa usando QT, o si alguien conoce alguna recomendación mejor que QT que funcione con C++ y pueda hacer este trabajo sería útil.
Gracias de antemano.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución

    Puede usar la biblioteca QCustomPlot en Qt para graficar la función ingresada. Aquí están los pasos para lograrlo:

    1. Analice la función ingresada por el usuario a una función C++ válida utilizando una biblioteca como muParser. Esta biblioteca le permite analizar una cadena en una función ejecutable.
    2. Cree un widget QCustomPlot en su interfaz gráfica de usuario (GUI).

    3. Cree una función que pueda generar los puntos de datos para su gráfico. Puede hacer esto evaluando la función en varios puntos entre los valores mínimos y máximos de x, y almacenando los resultados en un QVector.

    4. Cree un objeto QCPGraph para representar los puntos de datos en su gráfico.

    5. Personalice la apariencia de su gráfico según lo desee.

    Aquí hay un ejemplo de fragmento de código que utiliza estos pasos para generar un gráfico de la función ingresada:

    “`c++
    #include
    #include “muparser/muparser.h”

    void MainWindow::onPlotClicked()
    {
    // Obtenga la función ingresada por el usuario y los valores mínimos / máximos de x
    QString userFunction = ui->functionLineEdit->text();
    double minX = ui->minXSpinBox->value();
    double maxX = ui->maxXSpinBox->value();

    // Cree una instancia de muParser y compile la función ingresada por el usuario
    mu::Parser parser;
    parser.SetExpr(userFunction.toStdString());
    parser.DefineVar("x", &x);
    parser.Compile();
    
    // Genere puntos de datos para el gráfico
    QVector<double> xValues;
    QVector<double> yValues;
    int numPoints = 100;
    double stepSize = (maxX - minX) / (numPoints - 1);
    for (int i = 0; i < numPoints; ++i)
    {
        x = minX + i * stepSize;
        double y = parser.Eval();
        xValues.append(x);
        yValues.append(y);
    }
    
    // Borre los datos del gráfico anterior
    ui->customPlot->clearGraphs();
    
    // Cree un nuevo gráfico y agregue los datos
    ui->customPlot->addGraph();
    ui->customPlot->graph(0)->setData(xValues, yValues);
    
    // Establezca las etiquetas de los ejes y el título
    ui->customPlot->xAxis->setLabel("x");
    ui->customPlot->yAxis->setLabel("y");
    ui->customPlot->setTitle(userFunction);
    
    // Establezca los rangos de los ejes
    ui->customPlot->xAxis->setRange(minX, maxX);
    ui->customPlot->yAxis->setRange(0, 10);
    
    // Establezca el color y el grosor de la línea
    ui->customPlot->graph(0)->setPen(QPen(Qt::blue, 2));
    
    // Vuelva a graficar el gráfico
    ui->customPlot->replot();
    

    }
    “`

    Este código asume que tiene un widget QLineEdit para que el usuario ingrese la función, y widgets QSpinBox para los valores mínimos y máximos de x. También asume que tiene un widget QCustomPlot llamado customPlot en su interfaz de usuario (UI).

    Conclusión

    El uso de la biblioteca QCustomPlot con muParser le permite generar y personalizar fácilmente gráficos de funciones ingresadas por el usuario en su aplicación Qt. Este enfoque es lo suficientemente flexible como para manejar una amplia gama de tipos de funciones, y ofrece numerosas opciones para personalizar la apariencia del gráfico.

Comments are closed.