5 #ifndef _SPICA_INTERPOLATION_H_
6 #define _SPICA_INTERPOLATION_H_
10 #include "../core/common.h"
19 const std::vector<double>& xs);
26 inline double x(
int i)
const {
27 Assertion(i >= 0 && i < size(),
"Index out of bounds!!");
31 inline double f(
int i)
const {
32 Assertion(i >= 0 && i < size(),
"Index out of bounds!!: %d for %zu", i, fs_.size());
36 double evaluate(
double x)
const;
37 double sample(
double rand,
double* fval =
nullptr,
38 double* pdf =
nullptr)
const;
40 inline int size()
const {
return static_cast<int>(fs_.size()); }
44 bool weights(
double x,
double* w0,
double* w1,
double* w2,
45 double* w3,
int* offset =
nullptr)
const;
48 std::vector<double> xs_;
49 std::vector<double> fs_;
50 std::vector<double> Fs_;
58 const std::vector<double>& xs,
59 const std::vector<double>& ys);
65 inline double operator()(
int i,
int j)
const {
69 double evaluate(
double x,
double y)
const;
70 double sample(
double rand1,
double rand2,
double* fval =
nullptr,
71 double* pdf =
nullptr)
const;
73 inline const std::vector<double>& xs()
const {
return xs_; }
74 inline const std::vector<double>& ys()
const {
return ys_; }
75 inline const std::vector<double>& marginalY()
const {
return marginalY_; }
78 std::vector<std::vector<double>> fs_;
79 std::vector<std::vector<double>> cdf_;
80 std::vector<double> marginalY_;
81 std::vector<double> xs_;
82 std::vector<double> ys_;
90 bool catmullRomWeight(
const std::vector<double>& nodes,
double x,
91 double* w0,
double* w1,
double* w2,
double* w3,
95 double integrateCatmullRom(
const std::vector<double>& xs,
96 const std::vector<double>& fs,
97 std::vector<double>* cdf =
nullptr);
101 #endif // _SPICA_INTERPOLATION_H_
Definition: interpolation.h:53
Definition: interpolation.h:14