Public Member Functions | Private Member Functions | List of all members
EDepSim::Cubic Class Reference

#include <EDepSimInterpolator.hh>

Public Member Functions

 Cubic ()
 
double interpolate (const double *point, const std::vector< std::vector< std::vector< double >>> &g, const double *delta, const double *offset) const
 
double interpolate (double x, double y, double z, const std::vector< std::vector< std::vector< double >>> &g, double hx, double hy, double hz, double xo, double yo, double zo) const
 

Private Member Functions

double conv_kernel (double s) const
 

Detailed Description

Definition at line 44 of file EDepSimInterpolator.hh.

Constructor & Destructor Documentation

EDepSim::Cubic::Cubic ( )

Definition at line 34 of file EDepSimInterpolator.cc.

35 {
36 }

Member Function Documentation

double EDepSim::Cubic::conv_kernel ( double  s) const
private

Definition at line 84 of file EDepSimInterpolator.cc.

85 {
86  double v = 0;
87  double z = std::abs(s);
88 
89  if(0 <= z && z < 1)
90  v = 1 + (0.5) * z * z * (3 * z - 5);
91 
92  else if(1 < z && z < 2)
93  v = 2 - z * (4 + 0.5 * z * (z - 5));
94 
95  return v;
96 }
T abs(T value)
static QCString * s
Definition: config.cpp:1042
double EDepSim::Cubic::interpolate ( const double *  point,
const std::vector< std::vector< std::vector< double >>> &  g,
const double *  delta,
const double *  offset 
) const

Definition at line 38 of file EDepSimInterpolator.cc.

40 {
41  return interpolate(point[0], point[1], point[2], g, delta[0], delta[1], delta[2], offset[0], offset[1], offset[2]);
42 }
double interpolate(const double *point, const std::vector< std::vector< std::vector< double >>> &g, const double *delta, const double *offset) const
double EDepSim::Cubic::interpolate ( double  x,
double  y,
double  z,
const std::vector< std::vector< std::vector< double >>> &  g,
double  hx,
double  hy,
double  hz,
double  xo,
double  yo,
double  zo 
) const

Definition at line 44 of file EDepSimInterpolator.cc.

46 {
47  double v = 0;
48 
49  const int xsize = g.size();
50  const int ysize = g[0].size();
51  const int zsize = g[0][0].size();
52 
53  const double xp = (x - xo) / hx;
54  const double yp = (y - yo) / hy;
55  const double zp = (z - zo) / hz;
56 
57  const int x_idx = std::floor(xp);
58  const int y_idx = std::floor(yp);
59  const int z_idx = std::floor(zp);
60 
61  for(auto i : {x_idx - 1, x_idx, x_idx + 1, x_idx + 2})
62  {
63  for(auto j : {y_idx - 1, y_idx, y_idx + 1, y_idx + 2})
64  {
65  for(auto k : {z_idx - 1, z_idx, z_idx + 1, z_idx + 2})
66  {
67  if(i < 0 || j < 0 || k < 0)
68  continue;
69 
70  if(i >= xsize || j >= ysize || k >= zsize)
71  continue;
72 
73  const double x_c = conv_kernel(xp - i);
74  const double y_c = conv_kernel(yp - j);
75  const double z_c = conv_kernel(zp - k);
76  v += g[i][j][k] * x_c * y_c * z_c;
77  }
78  }
79  }
80 
81  return v;
82 }
double conv_kernel(double s) const
list x
Definition: train.py:276

The documentation for this class was generated from the following files: