12 size_t count = control_points.size();
18 return control_points[0].second;
20 t = cgv::math::clamp(t, control_points.min().first, control_points.max().first);
22 if(t > control_points[0].first) {
25 for(
size_t i = 1; i < count; ++i) {
26 if(control_points[idx].first <= t && control_points[i].first > t)
32 std::pair<float, T> n0 = control_points[idx];
33 std::pair<float, T> n1 = control_points[idx + 1];
38 return (t - t0) < (t1 - t) ? n0.second : n1.second;
40 return control_points[idx].second;
43 return control_points[0].second;
48 size_t count = control_points.size();
50 std::vector<T> data(n, (T)0);
52 if(n == 0 || count == 0)
56 std::fill(data.begin(), data.end(), control_points[0].second);
63 if(control_points.min().first > 0.0f)
66 float step = 1.0f /
static_cast<float>(n - 1);
68 for(
size_t i = 0; i < n; ++i) {
69 float t =
static_cast<float>(i) * step;
71 while(t > control_points[r].first && l < count - 1) {
73 r = std::min(l + 1, count - 1);
77 data[i] = (T)(control_points[r].second);
79 std::pair<float, T> n0 = control_points[l];
80 std::pair<float, T> n1 = control_points[r];
85 data[i] = (t - t0) < (t1 - t) ? n0.second : n1.second;