in dedupe_estimator.cpp [419:440]
FRGB interpolate_sample(const std::vector<size_t>& s, float pos) {
// pos is integral
if (pos == float(int(pos))) {
int ipos = int(pos);
if (ipos < 0) ipos = 0;
if (ipos >= s.size()) ipos = s.size() - 1;
return COLORS[s[ipos]];
} else {
int ipos = int(pos);
if (ipos < 0) ipos = 0;
if (ipos >= s.size()) ipos = s.size() - 1;
float left_weight = 1.0 - (pos - ipos);
float right_weight = 1.0 - left_weight;
FRGB color_left = COLORS[s[ipos]];
FRGB color_right = COLORS[s[std::min<size_t>(ipos + 1, s.size() - 1)]];
FRGB color;
color.r = left_weight * color_left.r + right_weight * color_right.r;
color.g = left_weight * color_left.g + right_weight * color_right.g;
color.b = left_weight * color_left.b + right_weight * color_right.b;
return color;
}
}