FRGB interpolate_sample()

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;
  }
}