1 #include "SplineInterpolator.h"
4 #include <boost/multi_array.hpp>
6 using namespace utl::Spline;
10 const std::vector<double>& values,
13 const size_t xn = values.size();
18 for (
size_t i = 0; i < xn; ++i)
21 Solver<1, KnotVector, BasisFunction> solver;
22 solver.Configure(0,
fSpline.GetKnotVector(),
fSpline.GetBasisVector(), bcX);
23 solver(&
fData.front());
37 const boost::multi_array<double,2>& values,
41 const size_t xn = values.shape()[0];
42 const size_t yn = values.shape()[1];
47 fData.resize((xn+2)*(yn+2));
48 for (
size_t i = 0; i < xn; ++i)
49 for (
size_t j = 0; j < yn; ++j)
50 fData[j*(xn+2) + i] = values[i][j];
52 Solver<2, KnotVector, BasisFunction> solver;
53 solver.Configure(0,
fSpline.GetKnotVector(0),
fSpline.GetBasisVector(0), bcX);
54 solver.Configure(1,
fSpline.GetKnotVector(1),
fSpline.GetBasisVector(1), bcY);
55 solver(&
fData.front());
73 const boost::multi_array<double,3>& values,
78 const size_t xn = values.shape()[0];
79 const size_t yn = values.shape()[1];
80 const size_t zn = values.shape()[2];
86 fData.resize((xn+2)*(yn+2)*(zn+2));
87 for (
size_t i = 0; i < xn; ++i)
88 for (
size_t j = 0; j < yn; ++j)
89 for (
size_t k = 0; k < zn; ++k)
90 fData[k*(yn+2)*(xn+2) + j*(xn+2) + i] = values[i][j][k];
92 Solver<3, KnotVector, BasisFunction> solver;
93 solver.Configure(0,
fSpline.GetKnotVector(0),
fSpline.GetBasisVector(0), bcX);
94 solver.Configure(1,
fSpline.GetKnotVector(1),
fSpline.GetBasisVector(1), bcY);
95 solver.Configure(2,
fSpline.GetKnotVector(2),
fSpline.GetBasisVector(2), bcZ);
96 solver(&
fData.front());
111 const boost::multi_array<double,2>& fValue,
114 const size_t fn = fValue.shape()[0];
115 const size_t xn = fValue.shape()[1];
119 fData.resize(fn, std::vector<double>(xn+2));
121 Solver<1, KnotVector, BasisFunction> solver;
122 solver.Configure(0,
fSpline.GetKnotVector(),
fSpline.GetBasisVector(), bcX);
123 for (
size_t m = 0;
m < fn; ++
m)
125 for (
size_t i = 0; i < xn; ++i)
127 solver(&
fData[
m].front());
135 for (
size_t m = 0;
m <
fData.size(); ++
m)
143 const boost::multi_array<double,3>& values,
147 const size_t fn = values.shape()[0];
148 const size_t xn = values.shape()[1];
149 const size_t yn = values.shape()[2];
154 fData.resize(fn, std::vector<double>((xn+2)*(yn+2)));
156 Solver<2, KnotVector, BasisFunction> solver;
157 solver.Configure(0,
fSpline.GetKnotVector(0),
fSpline.GetBasisVector(0), bcX);
158 solver.Configure(1,
fSpline.GetKnotVector(1),
fSpline.GetBasisVector(1), bcY);
159 for (
size_t m = 0;
m < fn; ++
m)
161 for (
size_t i = 0; i < xn; ++i)
162 for (
size_t j = 0; j < yn; ++j)
163 fData[
m][j*(xn+2) + i] = values[
m][i][j];
164 solver(&
fData[
m].front());
174 for (
size_t m = 0;
m <
fData.size(); ++
m)
184 const boost::multi_array<double,4>& values,
189 const size_t fn = values.shape()[0];
190 const size_t xn = values.shape()[1];
191 const size_t yn = values.shape()[2];
192 const size_t zn = values.shape()[3];
198 fData.resize(fn, std::vector<double>((xn+2)*(yn+2)*(zn+2)));
200 Solver<3, KnotVector, BasisFunction> solver;
201 solver.Configure(0,
fSpline.GetKnotVector(0),
fSpline.GetBasisVector(0), bcX);
202 solver.Configure(1,
fSpline.GetKnotVector(1),
fSpline.GetBasisVector(1), bcY);
203 solver.Configure(2,
fSpline.GetKnotVector(2),
fSpline.GetBasisVector(2), bcZ);
204 for (
size_t m = 0;
m < fn; ++
m)
206 for (
size_t i = 0; i < xn; ++i)
207 for (
size_t j = 0; j < yn; ++j)
208 for (
size_t k = 0; k < zn; ++k)
209 fData[
m][k*(yn+2)*(xn+2) + j*(xn+2) + i] = values[
m][i][j][k];
210 solver(&
fData[
m].front());
221 for (
size_t m = 0;
m <
fData.size(); ++
m)
std::vector< std::vector< double > > fData
Spline::Function< 3, KnotVector, BasisFunction > fSpline
Spline::Function< 2, KnotVector, BasisFunction > fSpline
std::vector< double > fData
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
std::vector< std::vector< double > > fData
double operator()(const double x, const double y, const double z) const
void Configure(const dim_t idim, const AKnotVector &knots)
Spline::Function< 1, KnotVector, BasisFunction > fSpline
std::vector< double > fData
void operator()(std::vector< double > &result, const double x, const double y) const
void operator()(std::vector< double > &result, const double x) const
Spline::Function< 1, KnotVector, BasisFunction > fSpline
double operator()(const double x) const
std::vector< double > fData
double operator()(const double x, const double y) const