1 //----------------------------------------------------------------------------
2 // Anti-Grain Geometry - Version 2.4
3 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
5 // Permission to copy, use, modify, sell and distribute this software
6 // is granted provided this copyright notice appears in all copies.
7 // This software is provided "as is" without express or implied
8 // warranty, and with no claim as to its suitability for any purpose.
10 //----------------------------------------------------------------------------
11 // Contact: mcseem@antigrain.com
12 // mcseemagg@yahoo.com
13 // http://www.antigrain.com
14 //----------------------------------------------------------------------------
18 //----------------------------------------------------------------------------
20 #ifndef AGG_BSPLINE_INCLUDED
21 #define AGG_BSPLINE_INCLUDED
23 #include "agg_array.h"
27 //----------------------------------------------------------------bspline
28 // A very simple class of Bi-cubic Spline interpolation.
29 // First call init(num, x[], y[]) where num - number of source points,
30 // x, y - arrays of X and Y values respectively. Here Y must be a function
31 // of X. It means that all the X-coordinates must be arranged in the ascending
33 // Then call get(x) that calculates a value Y for the respective X.
34 // The class supports extrapolation, i.e. you can call get(x) where x is
35 // outside the given with init() X-range. Extrapolation is a simple linear
38 // See Implementation agg_bspline.cpp
39 //------------------------------------------------------------------------
45 bspline(int num
, const double* x
, const double* y
);
48 void add_point(double x
, double y
);
51 void init(int num
, const double* x
, const double* y
);
53 double get(double x
) const;
54 double get_stateful(double x
) const;
57 bspline(const bspline
&);
58 const bspline
& operator = (const bspline
&);
60 static void bsearch(int n
, const double *x
, double x0
, int *i
);
61 double extrapolation_left(double x
) const;
62 double extrapolation_right(double x
) const;
63 double interpolation(double x
, int i
) const;
69 pod_array
<double> m_am
;
70 mutable int m_last_idx
;