fn interpolate_sample()

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