JKQtPlotter/examples/parametriccurve
jkriege2 d51d47b2f4 requiring higher cmake-version, due to CMP0076
using CMAKE_CURRENT_LIST_DIR instead of CMAKE_CURRENT_SOURCE_DIR
2022-04-18 22:00:31 +02:00
..
CMakeLists.txt requiring higher cmake-version, due to CMP0076 2022-04-18 22:00:31 +02:00
parametriccurve_and_lib.pro using CMake now to build examples 2019-06-20 22:24:47 +02:00
parametriccurve.cpp activated high-dpi scaling for all JKQtPlotter examples 2022-04-15 23:01:09 +02:00
parametriccurve.pro using CMake now to build examples 2019-06-20 22:24:47 +02:00
README.md fixed rename setPalette()->setColorPalette() in examples 2020-09-11 15:28:56 +02:00

Example (JKQTPlotter): Plotting Parametric Curves

This project (see ./examples/parametriccurve/) demonstrates how to draw parametric curves [x,y]=f(t), using JKQTPXYLineGraph and JKQTPXYParametrizedScatterGraph, i.e. from a set of coordinates [xi,yi], for which the vector-values function f(t) is evaluated explicitly. If you are alloking for an example of implicit drawing by only defining the function f(t) and having JKQTPlotter evaluate it automatically and adaptively, you'll have to use JKQTPXYFunctionLineGraph, which is explained in ./examples/evalcurve

The source code of the main application can be found in parametriccurve.cpp. First, the parametric curve (here a logarithic spiral) is sampled into two columns containing the x- and y-values along the curve. In addition the radial distance from x=y=0 is added into a third column:

    QVector<double> X, Y, R;
    const int Ndata=500; // number of plot points in each curve
    const double phiMax=4.0*M_PI;
    const double a=1;
    const double k=0.2;
    for (double phi=-phiMax; phi<=phiMax; phi+=phiMax/double(Ndata)) {
        const double x=a*exp(k*phi)*cos(phi);
        const double y=a*exp(k*phi)*sin(phi);
        X<<x;
        Y<<y;
        R<<sqrt(x*x+y*y);
    }
    // and copy it to the datastore
    size_t columnX=ds->addCopiedColumn(X, "x");
    size_t columnY=ds->addCopiedColumn(Y, "y");
    size_t columnR=ds->addCopiedColumn(R, "r");

Then simples graph just uses the columns X and Y to plot the curve:

    JKQTPXYLineGraph* graph1=new JKQTPXYLineGraph(&plot);
    graph1->setXColumn(columnX);
    graph1->setYColumn(columnY);
    graph1->setDrawLine(true);
    graph1->setSymbolType(JKQTPNoSymbol);
    graph1->setTitle("one-colored spiral");
    plot.addGraph(graph1);

If you use JKQTPXYParametrizedScatterGraph instead of JKQTPXYLineGraph, you can also modify the color of the line-segments, connecting the datapoints:

    JKQTPXYParametrizedScatterGraph* graph2=new JKQTPXYParametrizedScatterGraph(&plot2);
    graph2->setXColumn(columnX);
    graph2->setYColumn(columnY);
    graph2->setColorColumn(columnR);
    graph2->setColorPalette(ette(JKQTPMathImageMATLAB);
    graph2->setSymbolType(JKQTPNoSymbol);
    graph2->setDrawLine(true);
    graph2->setTitle("colored spiral");
    graph2->getColorBarRightAxis()->setAxisLabel("color scale radius $r(\\phi)$");
    plot2.addGraph(graph2);

The result looks like this:

parametriccurve

... and with the line-color set by the radius:

parametriccurve