in src/show.rs [191:219]
fn interpolate_sample(s: &[usize], pos: f32) -> FRGB {
if pos == pos.floor() {
let mut ipos = pos as isize;
if ipos < 0 {
ipos = 0;
}
if ipos >= s.len() as isize {
ipos = s.len() as isize - 1;
}
return getcolor(s[ipos as usize]);
} else {
let mut ipos = pos as isize;
if ipos < 0 {
ipos = 0;
}
if ipos >= s.len() as isize {
ipos = s.len() as isize - 1;
}
let left_weight = 1.0 - (pos - ipos as f32);
let right_weight = 1.0 - left_weight;
let color_left = getcolor(s[ipos as usize]);
let color_right = getcolor(s[min(ipos as usize + 1, s.len() - 1)]);
FRGB {
r: left_weight * color_left.r + right_weight * color_right.r,
g: left_weight * color_left.g + right_weight * color_right.g,
b: left_weight * color_left.b + right_weight * color_right.b,
}
}
}