SplineInterpolatorOffline.h
Go to the documentation of this file.
1 #ifndef _utl_SplineInterpolatorOffline_h_
2 #define _utl_SplineInterpolatorOffline_h_
3 
4 #include <utl/UniformBSpline.h>
5 #include <utl/SplineFunction.h>
6 #include <utl/SplineSolver.h>
7 
8 #include <vector>
9 #include <boost/multi_array.hpp>
10 
11 #include <utl/AugerException.h>
12 
13 
14 namespace utl {
15 
16  namespace Spline {
17 
27  using namespace ::Spline::Uniform;
28  using namespace ::Spline;
29 
30  class Interpolator1D {
31  public:
33 
34  Interpolator1D(const double xStart,
35  const double xStop, /* inclusive! */
36  const std::vector<double>& values,
37  const BoundaryCondition& bcX = BoundaryCondition());
38 
39  double operator()(const double x) const;
40 
41  double GetStart() const { return fSpline.GetStart(); }
42 
43  double GetStop() const { return fSpline.GetStop(); }
44 
45  protected:
46  std::vector<double> fData;
48  };
49 
50 
51  class Interpolator2D {
52  public:
54 
55  Interpolator2D(const double xStart,
56  const double xStop, /* inclusive! */
57  const double yStart,
58  const double yStop, /* inclusive! */
59  const boost::multi_array<double,2>& values,
61  const BoundaryCondition bcY = BoundaryCondition());
62 
63  double operator()(const double x, const double y) const;
64 
65  double GetStart(const unsigned char dimension) const
66  { return fSpline.GetStart(dimension); }
67 
68  double GetStop(const unsigned char dimension) const
69  { return fSpline.GetStop(dimension); }
70 
71  protected:
72  mutable double fX[2]; // proxy
73  std::vector<double> fData;
75  };
76 
77 
78  class Interpolator3D {
79  public:
81 
82  Interpolator3D(const double xStart,
83  const double xStop, /* inclusive! */
84  const double yStart,
85  const double yStop, /* inclusive! */
86  const double zStart,
87  const double zStop, /* inclusive! */
88  const boost::multi_array<double,3>& values,
91  const BoundaryCondition bcZ = BoundaryCondition());
92 
93  double operator()(const double x, const double y, const double z) const;
94 
95  double GetStart(const unsigned char dimension) const
96  { return fSpline.GetStart(dimension); }
97 
98  double GetStop(const unsigned char dimension) const
99  { return fSpline.GetStop(dimension); }
100 
101  protected:
102  mutable double fX[3]; // proxy
103  std::vector<double> fData;
105  };
106 
107 
108  class VectorInterpolator1D {
109  public:
111 
112  VectorInterpolator1D(const double xStart,
113  const double xStop, /* inclusive! */
114  const boost::multi_array<double,2>& fValue, // first index is function vector index!
115  const BoundaryCondition& bcX = BoundaryCondition());
116 
117  void operator()(std::vector<double>& result, const double x) const;
118 
119  double GetStart() const
120  { return fSpline.GetStart(); }
121 
122  double GetStop() const
123  { return fSpline.GetStop(); }
124 
125  protected:
126  std::vector< std::vector<double> > fData;
128  };
129 
130 
131  class VectorInterpolator2D {
132  public:
134 
135  VectorInterpolator2D(const double xStart,
136  const double xStop, /* inclusive! */
137  const double yStart,
138  const double yStop, /* inclusive! */
139  const boost::multi_array<double,3>& values, // first index is function vector index!
140  const BoundaryCondition& bcX = BoundaryCondition(),
141  const BoundaryCondition& bcY = BoundaryCondition());
142 
143  void operator()(std::vector<double>& result, const double x, const double y) const;
144 
145  double GetStart(const unsigned char dimension) const
146  { return fSpline.GetStart(dimension); }
147 
148  double GetStop(const unsigned char dimension) const
149  { return fSpline.GetStop(dimension); }
150 
151  protected:
152  mutable double fX[2]; // proxy
153  std::vector< std::vector<double> > fData;
155  };
156 
157 
158  class VectorInterpolator3D {
159  public:
161 
162  VectorInterpolator3D(const double xStart,
163  const double xStop, /* inclusive! */
164  const double yStart,
165  const double yStop, /* inclusive! */
166  const double zStart,
167  const double zStop, /* inclusive! */
168  const boost::multi_array<double,4>& values, // first index is function vector index!
169  const BoundaryCondition& bcX = BoundaryCondition(),
170  const BoundaryCondition& bcY = BoundaryCondition(),
171  const BoundaryCondition& bcZ = BoundaryCondition());
172 
173  void operator()(std::vector<double>& result, const double x, const double y, const double z) const;
174 
175  double GetStart(const unsigned char dimension) const
176  { return fSpline.GetStart(dimension); }
177 
178  double GetStop(const unsigned char dimension) const
179  { return fSpline.GetStop(dimension); }
180 
181  protected:
182  mutable double fX[3]; // proxy
183  std::vector< std::vector<double> > fData;
185  };
186 
187  }
188 
189 }
190 
191 
192 #endif
double GetStart(const unsigned char dimension) const
std::vector< std::vector< double > > fData
Spline::Function< 3, KnotVector, BasisFunction > fSpline
Spline::Function< 2, KnotVector, BasisFunction > fSpline
double GetStart(const unsigned char dimension) const
double GetStop(const unsigned char dimension) const
std::vector< std::vector< double > > fData
Spline::Function< 2, KnotVector, BasisFunction > fSpline
void operator()(std::vector< double > &result, const double x, const double y, const double z) const
Spline::Function< 3, KnotVector, BasisFunction > fSpline
const Data result[]
double GetStart(const unsigned char dimension) const
std::vector< std::vector< double > > fData
double operator()(const double x, const double y, const double z) const
double GetStop(const unsigned char dimension) const
Spline::Function< 1, KnotVector, BasisFunction > fSpline
void operator()(std::vector< double > &result, const double x, const double y) const
double GetStart(const unsigned char dimension) const
void operator()(std::vector< double > &result, const double x) const
double GetStop(const unsigned char dimension) const
double GetStop(const unsigned char dimension) const
Spline::Function< 1, KnotVector, BasisFunction > fSpline
double operator()(const double x) const
double operator()(const double x, const double y) const

, generated on Tue Sep 26 2023.