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 float a = (t - t0) / (t1 - t0);
40 return (T)((1.0f - a) * n0.second + a * n1.second);
42 return control_points[idx].second;
45 return control_points[0].second;
50 size_t count = control_points.size();
52 std::vector<T> data(n, (T)0);
54 if(n == 0 || count == 0)
58 std::fill(data.begin(), data.end(), control_points[0].second);
65 if(control_points.min().first > 0.0f)
68 float step = 1.0f /
static_cast<float>(n - 1);
70 for(
size_t i = 0; i < n; ++i) {
71 float t =
static_cast<float>(i) * step;
73 while(t > control_points[r].first && l < count - 1) {
75 r = std::min(l + 1, count - 1);
79 data[i] = (T)(control_points[r].second);
81 std::pair<float, T> n0 = control_points[l];
82 std::pair<float, T> n1 = control_points[r];
87 float a = (t - t0) / (t1 - t0);
89 data[i] = (T)((1.0f - a) * n0.second + a * n1.second);