QGIS/external/qwt-6.3.0/qwt_spline_cubic.h
Juergen E. Fischer 33fc476d89 * replace external qwtpolar with qwt 6.3
* require qwt >=6.2 (and fallback to internal 6.3 if system's qwt doesn't suffice)
* debian doesn't have qwt for Qt6 and won't have it for trixie
2025-07-23 07:11:51 +10:00

55 lines
1.8 KiB
C++

/******************************************************************************
* Qwt Widget Library
* Copyright (C) 1997 Josef Wilgen
* Copyright (C) 2002 Uwe Rathmann
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the Qwt License, Version 1.0
*****************************************************************************/
#ifndef QWT_SPLINE_CUBIC_H
#define QWT_SPLINE_CUBIC_H
#include "qwt_global.h"
#include "qwt_spline.h"
/*!
\brief A cubic spline
A cubic spline is a spline with C2 continuity at all control points.
It is a non local spline, what means that all polynomials are changing
when one control point has changed.
The implementation is based on the fact, that the continuity condition
means an equation with 3 unknowns for 3 adjacent points. The equation
system can be resolved by defining start/end conditions, that allow
substituting of one of the unknowns for the start/end equations.
Resolving the equation system is a 2 pass algorithm, requiring more CPU costs
than all other implemented type of splines.
\todo The implementation is not numerical stable
*/
class QWT_EXPORT QwtSplineCubic : public QwtSplineC2
{
public:
QwtSplineCubic();
virtual ~QwtSplineCubic();
virtual uint locality() const QWT_OVERRIDE;
virtual QPainterPath painterPath( const QPolygonF& ) const QWT_OVERRIDE;
virtual QVector< QLineF > bezierControlLines( const QPolygonF& points ) const QWT_OVERRIDE;
// calculating the parametric equations
virtual QVector< QwtSplinePolynomial > polynomials( const QPolygonF& ) const QWT_OVERRIDE;
virtual QVector< double > slopes( const QPolygonF& ) const QWT_OVERRIDE;
virtual QVector< double > curvatures( const QPolygonF& ) const QWT_OVERRIDE;
private:
class PrivateData;
PrivateData* m_data;
};
#endif