Diffstat (limited to 'src/dumb.rs')
| -rw-r--r-- | src/dumb.rs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/dumb.rs b/src/dumb.rs new file mode 100644 index 0000000..12608a7 --- /dev/null +++ b/src/dumb.rs @@ -0,0 +1,27 @@ +use atools::prelude::*; +pub trait Closest { + fn closest(&self, color: [f32; 4]) -> (f32, [f32; 4], usize); +} + +fn euclidean_distance(f: [f32; 4], with: [f32; 4]) -> f32 { + f.asub(with).map(|x| x * x).sum() +} + +impl Closest for &[[f32; 4]] { + fn closest(&self, color: [f32; 4]) -> (f32, [f32; 4], usize) { + self.iter() + .enumerate() + .map(|(i, x)| (euclidean_distance(*x, color), x, i)) + .min_by(|x, y| x.0.total_cmp(&y.0)) + .map(|(d, x, i)| (d, *x, i)) + .unwrap() + // let mut best = (euclidean_distance(self[0], color), self[0], 0); + // for (&c, i) in self[1..].iter().zip(1..) { + // let d = euclidean_distance(c, color); + // if d < best.0 { + // best = (d, c, i); + // } + // } + // best + } +} |