fn generate_color_sequence()

in src/show.rs [221:256]


fn generate_color_sequence(s: &[usize]) -> Vec<RGB> {
    let mut ret = Vec::new();
    for i in 0..SEQUENCE_LENGTH {
        let mut fpos = (i * s.len()) as f32 / SEQUENCE_LENGTH as f32;
        let fnextpos = ((i + 1) * s.len()) as f32 / SEQUENCE_LENGTH as f32;
        if fpos > (s.len() - 1) as f32 {
            fpos = (s.len() - 1) as f32;
        }
        let mut color = FRGB {
            r: 0.0,
            g: 0.0,
            b: 0.0,
        };
        let mut weight = 0.0;

        let mut j = fpos;
        while j < fnextpos {
            let sample = interpolate_sample(s, j);
            let w = (fnextpos - fpos).max(1.0);
            color.r += sample.r * w;
            color.g += sample.g * w;
            color.b += sample.b * w;
            weight += w;
            j += 1.0;
        }
        color.r /= weight;
        color.g /= weight;
        color.b /= weight;
        ret.push(RGB {
            r: color.r.min(255.0).max(0.0) as u8,
            g: color.g.min(255.0).max(0.0) as u8,
            b: color.b.min(255.0).max(0.0) as u8,
        });
    }
    ret
}