kdtree/lib.rs
1//! # kdtree
2//!
3//! K-dimensional tree for Rust (bucket point-region implementation)
4//!
5//! ## Usage
6//!
7//! ```
8//! use kdtree::KdTree;
9//! use kdtree::ErrorKind;
10//! use kdtree::distance::squared_euclidean;
11//!
12//! let a: ([f64; 2], usize) = ([0f64, 0f64], 0);
13//! let b: ([f64; 2], usize) = ([1f64, 1f64], 1);
14//! let c: ([f64; 2], usize) = ([2f64, 2f64], 2);
15//! let d: ([f64; 2], usize) = ([3f64, 3f64], 3);
16//!
17//! let dimensions = 2;
18//! let mut kdtree = KdTree::new(dimensions);
19//!
20//! kdtree.add(&a.0, a.1).unwrap();
21//! kdtree.add(&b.0, b.1).unwrap();
22//! kdtree.add(&c.0, c.1).unwrap();
23//! kdtree.add(&d.0, d.1).unwrap();
24//!
25//! assert_eq!(kdtree.size(), 4);
26//! assert_eq!(
27//! kdtree.nearest(&a.0, 0, &squared_euclidean).unwrap(),
28//! vec![]
29//! );
30//! assert_eq!(
31//! kdtree.nearest(&a.0, 1, &squared_euclidean).unwrap(),
32//! vec![(0f64, &0)]
33//! );
34//! assert_eq!(
35//! kdtree.nearest(&a.0, 2, &squared_euclidean).unwrap(),
36//! vec![(0f64, &0), (2f64, &1)]
37//! );
38//! assert_eq!(
39//! kdtree.nearest(&a.0, 3, &squared_euclidean).unwrap(),
40//! vec![(0f64, &0), (2f64, &1), (8f64, &2)]
41//! );
42//! assert_eq!(
43//! kdtree.nearest(&a.0, 4, &squared_euclidean).unwrap(),
44//! vec![(0f64, &0), (2f64, &1), (8f64, &2), (18f64, &3)]
45//! );
46//! assert_eq!(
47//! kdtree.nearest(&a.0, 5, &squared_euclidean).unwrap(),
48//! vec![(0f64, &0), (2f64, &1), (8f64, &2), (18f64, &3)]
49//! );
50//! assert_eq!(
51//! kdtree.nearest(&b.0, 4, &squared_euclidean).unwrap(),
52//! vec![(0f64, &1), (2f64, &0), (2f64, &2), (8f64, &3)]
53//! );
54//! ```
55extern crate num_traits;
56extern crate thiserror;
57
58#[cfg(feature = "serialize")]
59#[cfg_attr(feature = "serialize", macro_use)]
60extern crate serde_derive;
61
62pub mod distance;
63mod heap_element;
64pub mod kdtree;
65mod util;
66pub use crate::kdtree::ErrorKind;
67pub use crate::kdtree::KdTree;