diff options
Diffstat (limited to 'noatun/library/spline.h')
-rw-r--r-- | noatun/library/spline.h | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/noatun/library/spline.h b/noatun/library/spline.h new file mode 100644 index 00000000..db1bb03b --- /dev/null +++ b/noatun/library/spline.h @@ -0,0 +1,74 @@ +/* +Copyright (C) 1998 Jürgen Hochwald <juergen.hochwald@privat.kkf.net> + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public +License as published by the Free Software Foundation; either +version 2 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this library; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. +*/ + + + +#ifndef SPLINE_H +#define SPLINE_H + +#include <stdlib.h> +#include <vector> + +class Spline +{ + struct Group + { + double x, y, y2; + }; + + std::vector<Spline::Group> mPoints; + bool mRecalc; + double yp1; + double ypn; + + // stupid AIX[?] compiler won't let me give it a value here + static const bool natural; + +public: + Spline(); + Spline(const Spline ©); + + Spline &operator =(const Spline ©); + ~Spline(); + + /** + * if the curve had @p count points, return them + **/ + std::vector<double> points(int count) const; + + void add(double x, double y); + double spline(double xarg) const; + double operator[] (double xarg) const { return spline(xarg); } + int numPoints() const { return mPoints.size(); } + double x(int num) const; + double y(int num) const; + + void clear(); + +private: + void calcSpline() const + { + const_cast<Spline*>(this)->calcSpline(); + } + void calcSpline(); + +}; + +#endif + |