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
}