Search code examples
c++qtqwtbspline

How to create a B-Spline with QwtSpline


In QwtSpline there are two different types of splines, but I don't see a difference between both types.

I found a image, that explains my problem: "https://i.sstatic.net/x3cVJ.jpg"

QwtSpline always creates a spline, like that on the left side of the picture. But I want to have a Spline, like that one on the right side.

My Code is the following:

QwtSpline spline;
QPolygonF polygon;
QVector<QPointF> result;

polygon.append(startPoint);
polygon.append(rotatedPoint);
polygon.append(endPoint);

spline.setPoints(polygon);

for(double i = startPoint.rx(); i < endPoint.rx(); i++)
{
    result << QPointF(i, spline.value(i));
}
result << QPointF(endPoint.rx(), spline.value(endPoint.rx()));

What I want to do, is to draw a spline like that one on the right side of the picture to a QwtPlot. Maybe there is a easier way to solve my problem, than creating a QwtSpline iterate throug it to creat a QwtCurve with every point on the QwtSpline.

If it is easier, to draw a bezier curve to QwtPlot, that's no problem, a bezier curve would be easier for me. I only took a spline, because I didn't find a bezier curve in Qwt.


Solution

  • Try Qwt from one of the branches >= 6.2. It has a complete new implementation of several spline interpolation algorithms.

    But if it is about drawing a bezier curve only you can also use QwtShapeItem, what is displaying a QPainterPath. Of course you can also use QPainterPath to create a QPolygon from your bezier curve and then use QwtPlotCurve.