74 constexpr V
eval(
const T x)
const
76 assert(std::is_sorted(control_points.cbegin(), control_points.cend()) &&
"The Control points must be sorted by position!");
78 if (control_points.size() == 0)
83 if (control_points.size() == 1)
85 return control_points.at(0).value;
88 const auto pos_final = std::find_if(control_points.cbegin(), control_points.cend(), [&x](
const Point& point)
90 return point.position > x;
94 if (pos_final == control_points.cbegin())
96 return pos_final->value;
100 if (pos_final == control_points.cend())
102 return (pos_final-1)->value;
105 const auto pos_begin = pos_final-1;
109 return pos_begin->value;
113 T factor = (pos_final->position != pos_begin->position)
114 ? (x - pos_begin->position) / (pos_final->position - pos_begin->position)
118 return (1.0f-factor) * pos_begin->value + factor * pos_final->value;
122 return pos_final->value;