Files
GoldenCheetah/qwt/src/qwt_spline_cubic.h
Joachim Kohlhammer 49cf6340a4 Upgraded Qwt to 6.2 (branch: qwt-multiaxes) (#4427)
This commit is based on https://github.com/GoldenCheetah/GoldenCheetah/pull/3956
with the following additions / changes:
* Upgraded to the latest version of the multiaxes-branch, thus eliminating crashes of GoldenCheetah on startup
* Disabled the emitting of Layout Requests on geometry changes of QwtScaleWidget - without this, CPU utilization was up to 100% on one core
* Added the class SplineLookup, reusing small portions of code from Qwt 6.1
* Re-added the splines in WPrime and RideFile (resampling), using the new interface of QwtSpline
* Appveyor: qwt in cache-section now depends on qwt/qwtconfig.prin.in for refresh on version change
2024-01-06 18:59:55 -03: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