12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- //----------------------------------------------------------------------------
- // Anti-Grain Geometry - Version 2.4
- // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
- //
- // Permission to copy, use, modify, sell and distribute this software
- // is granted provided this copyright notice appears in all copies.
- // This software is provided "as is" without express or implied
- // warranty, and with no claim as to its suitability for any purpose.
- //
- //----------------------------------------------------------------------------
- // Contact: mcseem@antigrain.com
- // mcseemagg@yahoo.com
- // http://www.antigrain.com
- //----------------------------------------------------------------------------
- //
- // class bspline
- //
- //----------------------------------------------------------------------------
- #ifndef AGG_BSPLINE_INCLUDED
- #define AGG_BSPLINE_INCLUDED
- #include "agg_array.h"
- namespace agg
- {
- //----------------------------------------------------------------bspline
- // A very simple class of Bi-cubic Spline interpolation.
- // First call init(num, x[], y[]) where num - number of source points,
- // x, y - arrays of X and Y values respectively. Here Y must be a function
- // of X. It means that all the X-coordinates must be arranged in the ascending
- // order.
- // Then call get(x) that calculates a value Y for the respective X.
- // The class supports extrapolation, i.e. you can call get(x) where x is
- // outside the given with init() X-range. Extrapolation is a simple linear
- // function.
- //
- // See Implementation agg_bspline.cpp
- //------------------------------------------------------------------------
- class bspline
- {
- public:
- bspline();
- bspline(int num);
- bspline(int num, const double* x, const double* y);
- void init(int num);
- void add_point(double x, double y);
- void prepare();
- void init(int num, const double* x, const double* y);
- double get(double x) const;
- double get_stateful(double x) const;
-
- private:
- bspline(const bspline&);
- const bspline& operator = (const bspline&);
- static void bsearch(int n, const double *x, double x0, int *i);
- double extrapolation_left(double x) const;
- double extrapolation_right(double x) const;
- double interpolation(double x, int i) const;
- int m_max;
- int m_num;
- double* m_x;
- double* m_y;
- pod_array<double> m_am;
- mutable int m_last_idx;
- };
- }
- #endif
|