extern crate kdtree; use std::fmt; use kdtree::KdTree; #[derive(Clone)] struct Vector2 { data: [f64; 2], } impl Vector2 { pub fn new(x: f64, y: f64) -> Vector2 { Vector2 { data: [x, y] } } } impl fmt::Display for Vector2 { fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { write!(formatter, "({}, {})", self.data[0], self.data[1]) } } fn main() { let mut points = vec![ Vector2::new(2.0, 3.0), Vector2::new(5.0, 4.0), Vector2::new(9.0, 6.0), Vector2::new(4.0, 7.0), Vector2::new(8.0, 1.0), Vector2::new(7.0, 2.0), ]; let kdtree = KdTree::min_leaf_size( &mut points, 2, |coord, ref a, ref b| a.data[coord].partial_cmp(&b.data[coord]).unwrap(), 1, ); println!("{}", kdtree); kdtree.traverse_leaves(&mut |locations, elements| { for element in elements { println!("{}", element); } }); }