/* Copyright (C) 1998 Jürgen Hochwald 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef SPLINE_H #define SPLINE_H #include #include class Spline { struct Group { double x, y, y2; }; std::vector 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 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(this)->calcSpline(); } void calcSpline(); }; #endif