KrisLibrary  1.0.0
spline/basis.h
1 #ifndef SPLINE_BASIS_H
2 #define SPLINE_BASIS_H
3 
5 using namespace Math;
6 
7 /*
8  * SplineBasis (abstract)
9  * A set of spline basis functions bi(u)
10  * Note: The order of the basis functions varies for each basis.
11  */
13 {
14  SplineBasis() {}
15  virtual ~SplineBasis() {}
16 
17  virtual int Order() const = 0;
18 
19  virtual Real RangeMin() const { return Zero; }
20  virtual Real RangeMax() const { return One; }
21 
22  //vals must be at least of size Order()+1
23  virtual void EvalBasis(Real u, Real* vals) const = 0;
24  virtual void EvalBasisDeriv(Real u, int deriv, Real* vals) const = 0;
25 };
26 
27 /*
28  * LinearSplineBasis
29  * A linear basis function.
30  * Interpolates x0 and x1
31  */
33 {
34  virtual int Order() const { return 1; }
35 
36  void EvalBasis(Real u, Real* vals) const;
37  void EvalBasisDeriv(Real u, int deriv, Real* vals) const;
38 };
39 
40 
41 /*
42  * CubicSplineBasis (abstract)
43  * A basic arbitrary cubic spline basis function, given by a matrix of coefficients.
44  * bi(u) = B[i][3]*u^3 + B[i][2]*u^2 + B[i][1]*u + B[i][0]
45  * BasisCoeffs() must be defined.
46  */
48 {
49  virtual int Order() const { return 3; }
50  void EvalBasis(Real u, Real* vals) const;
51  void EvalBasisDeriv(Real u, int deriv, Real* vals) const;
52 
53  virtual const Real* BasisCoeffs(int i) const = 0;
54 };
55 
56 
57 /*
58  * HermiteSplineBasis
59  * A cubic hermite spline basis function.
60  * The spline is b0*p0 + b1*p1 + b2*t0 + b3*t1, where pi are sample points and ti are tangents
61  */
63 {
64  virtual const Real* BasisCoeffs(int i) const;
65 };
66 
67 /*
68  * CardinalSplineBasis
69  * A cardinal basis function
70  * The spline is b0*p-1 + b1*p0 + b2*p1 + b3*p2, where pi are interpolant points
71  */
73 {
74  virtual const Real* BasisCoeffs(int i) const { return B[i]; }
75 
76  void SetTension(Real tension);
77 
78  Real B[4][4];
79 };
80 
81 /*
82  * BezierCubicSplineBasis
83  * A bezier basis function
84  * The spline is b0*p0 + b1*c0 + b2*c1 + b3*p1, where pi are interpolant points and ci are control points
85  */
87 {
88  virtual const Real* BasisCoeffs(int i) const;
89 };
90 
91 #endif
Common math typedefs, constants, functions.
Definition: spline/basis.h:72
Definition: spline/basis.h:12
Definition: spline/basis.h:62
Definition: spline/basis.h:86
Contains all definitions in the Math package.
Definition: WorkspaceBound.h:12
Definition: spline/basis.h:32
Definition: spline/basis.h:47