3 #include <geneial/namespaces.h>
10 #define M_PI 3.14159265358979323846f
13 geneial_private_namespace(geneial)
15 geneial_private_namespace(utility)
18 geneial_export_namespace
21 template<
typename VALUE_TYPE>
22 VALUE_TYPE Interpolators::linearInterpolate(VALUE_TYPE y0, VALUE_TYPE x0, VALUE_TYPE y1, VALUE_TYPE x1, VALUE_TYPE x)
24 if ((x0 - x1) <= 1e-7)
26 assert(std::abs(y1 - y0) <= 1e-7);
32 return linearInterpolate<VALUE_TYPE>(y0, y1, (x - x0) / (x1 - x0));
37 return linearInterpolate<VALUE_TYPE>(y1, y0, (x - x1) / (x0 - x1));
41 template<
typename VALUE_TYPE>
42 VALUE_TYPE Interpolators::linearInterpolate(VALUE_TYPE y0, VALUE_TYPE y1, VALUE_TYPE t)
44 return (1 - t) * y0 + t * y1;
47 template<
typename VALUE_TYPE>
48 VALUE_TYPE Interpolators::cosineInterpolate(VALUE_TYPE y0, VALUE_TYPE x0, VALUE_TYPE y1, VALUE_TYPE x1, VALUE_TYPE x)
50 if ((x0 - x1) <= 1e-7)
52 assert(std::abs(y1 - y0) <= 1e-7);
58 return linearInterpolate<VALUE_TYPE>(y0, y1, (x - x0) / (x1 - x0));
63 return linearInterpolate<VALUE_TYPE>(y1, y0, (x - x1) / (x0 - x1));
67 template<
typename VALUE_TYPE>
68 VALUE_TYPE Interpolators::cosineInterpolate(VALUE_TYPE y0, VALUE_TYPE y1, VALUE_TYPE t)
70 const double t2 = (1 - std::cos(t * M_PI)) / 2;
71 return (y0 * (1 - t2) + y1 * t2);