60 void build(
const std::vector<float> &xin,
const std::vector<float> &yin);
63 const std::vector<float> &y);
65 void interpolate(
const std::vector<float> &values_in,
66 std::vector<float> &values_out)
const;
69 nnai *handle =
nullptr;
70 delaunay *d =
nullptr;
71 std::vector<double> xout;
72 std::vector<double> yout;
99 float a10 = f10 - f00;
100 float a01 = f01 - f00;
101 float a11 = f11 - f10 - f01 + f00;
102 return f00 + a10 * u + a01 * v + a11 * u * v;
107 return p[1] + 0.5 * x *
109 x * (2.0 * p[0] - 5.0 * p[1] + 4.0 * p[2] - p[3] +
110 x * (3.0 * (p[1] - p[2]) + p[3] - p[0])));
147 const Array &mask_fixed_values,
148 int iterations_max = 500,
149 float tolerance = 1e-5f,
180 const std::vector<float> &x,
181 const std::vector<float> &y,
182 const std::vector<float> &values,
184 const Array *p_noise_x =
nullptr,
185 const Array *p_noise_y =
nullptr,
186 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
207 const std::vector<float> &x,
208 const std::vector<float> &y,
209 const std::vector<float> &values,
210 const Array *p_noise_x =
nullptr,
211 const Array *p_noise_y =
nullptr,
212 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f},
213 float fill_value = 0.f);
220 const std::vector<float> &x,
221 const std::vector<float> &y,
222 const std::vector<float> &values,
223 const Array *p_noise_x =
nullptr,
224 const Array *p_noise_y =
nullptr,
225 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f},
226 float fill_value = 0.f,
227 float gradient_scaling = 1.f);
233 const std::vector<float> &x,
234 const std::vector<float> &y,
235 const std::vector<float> &values,
236 const Array *p_noise_x =
nullptr,
237 const Array *p_noise_y =
nullptr,
238 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f},
246 const std::vector<float> &x,
247 const std::vector<float> &y,
248 const std::vector<float> &values,
249 const Array *p_noise_x =
nullptr,
250 const Array *p_noise_y =
nullptr,
251 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f},
252 float distance_exp = 2.f,
273 const std::vector<float> &x,
274 const std::vector<float> &y,
275 const std::vector<float> &values,
276 const Array *p_noise_x =
nullptr,
277 const Array *p_noise_y =
nullptr,
278 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
284 const std::vector<float> &x,
285 const std::vector<float> &y,
286 const std::vector<float> &values,
287 const Array *p_noise_x =
nullptr,
288 const Array *p_noise_y =
nullptr,
289 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
298 const Array &mask_fixed_values,
299 int iterations_max = 500);
Declaration of the Array class for 2D floating-point arrays with various mathematical operations and ...
Definition interpolate2d.hpp:55
NaturalNeighborInterpolator()=default
void build(const std::vector< float > &xin, const std::vector< float > &yin)
Definition natural_neighbor_interpolator.cpp:19
void interpolate(const std::vector< float > &values_in, std::vector< float > &values_out) const
Definition natural_neighbor_interpolator.cpp:40
~NaturalNeighborInterpolator()
Definition natural_neighbor_interpolator.cpp:13
void setup_output_points(const std::vector< float > &x, const std::vector< float > &y)
Definition natural_neighbor_interpolator.cpp:60
Definition blending.hpp:186
Definition algebra.hpp:23
Array interpolate2d_gaussian(glm::ivec2 shape, const std::vector< float > &x, const std::vector< float > &y, const std::vector< float > &values, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f}, float sigma=0.05f, float radius=0.f)
2D interpolation using the Gaussian kernel method.
Definition interpolate2d_gaussian.cpp:11
Array interpolate2d_idw(glm::ivec2 shape, const std::vector< float > &x, const std::vector< float > &y, const std::vector< float > &values, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f}, float distance_exp=2.f, float radius=0.f)
2D interpolation using the IDW method.
Definition interpolate2d_idw.cpp:13
Array interpolate2d_nearest(glm::ivec2 shape, const std::vector< float > &x, const std::vector< float > &y, const std::vector< float > &values, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
2D interpolation using the nearest neighbor method.
Definition interpolate2d_nearest.cpp:11
InterpolationMethod2D
Enumeration of 2D interpolation methods.
Definition interpolate2d.hpp:45
@ ITP2D_IDW
Inverse Distance Weighting.
Definition interpolate2d.hpp:48
@ ITP2D_DELAUNAY
Delaunay triangulation method for 2D interpolation.
Definition interpolate2d.hpp:46
@ ITP2D_NNI
Natural Neighbor Interpolation.
Definition interpolate2d.hpp:50
@ ITP2D_DELAUNAY_GRADIENT
Delaunay triangulation + linear gradient.
Definition interpolate2d.hpp:51
@ ITP2D_GAUSSIAN
Gaussian Distance Weighting.
Definition interpolate2d.hpp:49
@ ITP2D_NEAREST
Nearest point method for 2D interpolation.
Definition interpolate2d.hpp:47
Array harmonic_interpolation(const Array &array, const Array &mask_fixed_values, int iterations_max=500, float tolerance=1e-5f, float omega=1.8f)
Perform harmonic interpolation on a 2D array using the Successive Over-Relaxation (SOR) method.
Definition harmonic_interpolation.cpp:11
Array interpolate2d_delaunay_gradient(glm::ivec2 shape, const std::vector< float > &x, const std::vector< float > &y, const std::vector< float > &values, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f}, float fill_value=0.f, float gradient_scaling=1.f)
2D interpolation using a smoother version of the Delaunay triangulation method.
Definition interpolate2d_delaunay_gradient.cpp:15
Array interpolate2d_nni(glm::ivec2 shape, const std::vector< float > &x, const std::vector< float > &y, const std::vector< float > &values, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
2D interpolation using the Natural Neighbor Interpolation method.
Definition interpolate2d_nni.cpp:11
Array interpolate2d_delaunay(glm::ivec2 shape, const std::vector< float > &x, const std::vector< float > &y, const std::vector< float > &values, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f}, float fill_value=0.f)
2D interpolation using the Delaunay triangulation method.
Definition interpolate2d_delaunay.cpp:15
float bilinear_interp(float f00, float f10, float f01, float f11, float u, float v)
Compute the bilinear interpolated value from four input values.
Definition interpolate2d.hpp:92
Array interpolate2d(glm::ivec2 shape, const std::vector< float > &x, const std::vector< float > &y, const std::vector< float > &values, InterpolationMethod2D interpolation_method, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Generic 2D interpolation function.
Definition interpolate2d.cpp:15
float cubic_interpolate(float p[4], float x)
Definition interpolate2d.hpp:105