123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- /* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * 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_H
- #define QWT_SPLINE_H
- #include "qwt_global.h"
- #include <qpolygon.h>
- #include <qvector.h>
- /*!
- \brief A class for spline interpolation
- The QwtSpline class is used for cubical spline interpolation.
- Two types of splines, natural and periodic, are supported.
- \par Usage:
- <ol>
- <li>First call setPoints() to determine the spline coefficients
- for a tabulated function y(x).
- <li>After the coefficients have been set up, the interpolated
- function value for an argument x can be determined by calling
- QwtSpline::value().
- </ol>
- \par Example:
- \code
- #include <qwt_spline.h>
- QPolygonF interpolate(const QPolygonF& points, int numValues)
- {
- QwtSpline spline;
- if ( !spline.setPoints(points) )
- return points;
- QPolygonF interpolatedPoints(numValues);
- const double delta =
- (points[numPoints - 1].x() - points[0].x()) / (points.size() - 1);
- for(i = 0; i < points.size(); i++) / interpolate
- {
- const double x = points[0].x() + i * delta;
- interpolatedPoints[i].setX(x);
- interpolatedPoints[i].setY(spline.value(x));
- }
- return interpolatedPoints;
- }
- \endcode
- */
- class QWT_EXPORT QwtSpline
- {
- public:
- //! Spline type
- enum SplineType
- {
- //! A natural spline
- Natural,
- //! A periodic spline
- Periodic
- };
- QwtSpline();
- QwtSpline( const QwtSpline & );
- ~QwtSpline();
- QwtSpline &operator=( const QwtSpline & );
- void setSplineType( SplineType );
- SplineType splineType() const;
- bool setPoints( const QPolygonF& points );
- QPolygonF points() const;
- void reset();
- bool isValid() const;
- double value( double x ) const;
- const QVector<double> &coefficientsA() const;
- const QVector<double> &coefficientsB() const;
- const QVector<double> &coefficientsC() const;
- protected:
- bool buildNaturalSpline( const QPolygonF & );
- bool buildPeriodicSpline( const QPolygonF & );
- private:
- class PrivateData;
- PrivateData *d_data;
- };
- #endif
|