[−][src]Struct kd_tree::KdSliceN
A slice of kd-tree.
This type implements std::ops::Deref
to [T]
.
This is an unsized type, meaning that it must always be used as a reference.
For an owned version of this type, see KdTree
.
Implementations
impl<T, N: Unsigned> KdSliceN<T, N>
[src]
pub fn items(&self) -> &[T]
[src]
pub fn sort_by<F>(items: &mut [T], compare: F) -> &Self where
F: Fn(&T, &T, usize) -> Ordering + Copy,
[src]
F: Fn(&T, &T, usize) -> Ordering + Copy,
Example
struct Item { point: [i32; 3], id: usize, } let mut items: Vec<Item> = vec![ Item { point: [1, 2, 3], id: 111 }, Item { point: [3, 1, 2], id: 222 }, Item { point: [2, 3, 1], id: 333 }, ]; let kdtree = kd_tree::KdSlice3::sort_by(&mut items, |item1, item2, k| item1.point[k].cmp(&item2.point[k])); assert_eq!(kdtree.nearest_by(&[3, 1, 2], |item, k| item.point[k]).unwrap().item.id, 222);
pub fn sort_by_key<Key: Ord, F>(items: &mut [T], kd_key: F) -> &Self where
F: Fn(&T, usize) -> Key + Copy,
[src]
F: Fn(&T, usize) -> Key + Copy,
Example
struct Item { point: [f64; 3], id: usize, } let mut items: Vec<Item> = vec![ Item { point: [1.0, 2.0, 3.0], id: 111 }, Item { point: [3.0, 1.0, 2.0], id: 222 }, Item { point: [2.0, 3.0, 1.0], id: 333 }, ]; use ordered_float::OrderedFloat; let kdtree = kd_tree::KdSlice3::sort_by_key(&mut items, |item, k| OrderedFloat(item.point[k])); assert_eq!(kdtree.nearest_by(&[3.1, 0.9, 2.1], |item, k| item.point[k]).unwrap().item.id, 222);
pub fn sort_by_ordered_float(points: &mut [T]) -> &Self where
T: KdPoint<Dim = N>,
T::Scalar: Float,
[src]
T: KdPoint<Dim = N>,
T::Scalar: Float,
Example
use kd_tree::KdSlice; let mut items: Vec<[f64; 3]> = vec![[1.0, 2.0, 3.0], [3.0, 1.0, 2.0], [2.0, 3.0, 1.0]]; let kdtree: &KdSlice<[f64; 3]> = KdSlice::sort_by_ordered_float(&mut items); assert_eq!(kdtree.nearest(&[3.1, 0.9, 2.1]).unwrap().item, &[3.0, 1.0, 2.0]);
pub fn sort(points: &mut [T]) -> &Self where
T: KdPoint<Dim = N>,
T::Scalar: Ord,
[src]
T: KdPoint<Dim = N>,
T::Scalar: Ord,
Example
use kd_tree::KdSlice; let mut items: Vec<[i32; 3]> = vec![[1, 2, 3], [3, 1, 2], [2, 3, 1]]; let kdtree: &KdSlice<[i32; 3]> = KdSlice::sort(&mut items); assert_eq!(kdtree.nearest(&[3, 1, 2]).unwrap().item, &[3, 1, 2]);
pub fn nearest_by<Q: KdPoint>(
&self,
query: &Q,
coord: impl Fn(&T, usize) -> Q::Scalar + Copy
) -> Option<ItemAndDistance<'_, T, Q::Scalar>>
[src]
&self,
query: &Q,
coord: impl Fn(&T, usize) -> Q::Scalar + Copy
) -> Option<ItemAndDistance<'_, T, Q::Scalar>>
Returns the nearest item from the input point. Returns None
if self.is_empty()
.
Example
struct Item { point: [f64; 3], id: usize, } let mut items: Vec<Item> = vec![ Item { point: [1.0, 2.0, 3.0], id: 111 }, Item { point: [3.0, 1.0, 2.0], id: 222 }, Item { point: [2.0, 3.0, 1.0], id: 333 }, ]; use ordered_float::OrderedFloat; let kdtree = kd_tree::KdSlice3::sort_by_key(&mut items, |item, k| OrderedFloat(item.point[k])); assert_eq!(kdtree.nearest_by(&[3.1, 0.9, 2.1], |item, k| item.point[k]).unwrap().item.id, 222);
pub fn nearest(
&self,
query: &impl KdPoint<Scalar = T::Scalar, Dim = T::Dim>
) -> Option<ItemAndDistance<'_, T, T::Scalar>> where
T: KdPoint,
[src]
&self,
query: &impl KdPoint<Scalar = T::Scalar, Dim = T::Dim>
) -> Option<ItemAndDistance<'_, T, T::Scalar>> where
T: KdPoint,
Returns the nearest item from the input point. Returns None
if self.is_empty()
.
Example
let mut items: Vec<[i32; 3]> = vec![[1, 2, 3], [3, 1, 2], [2, 3, 1]]; let kdtree = kd_tree::KdSlice::sort(&mut items); assert_eq!(kdtree.nearest(&[3, 1, 2]).unwrap().item, &[3, 1, 2]);
Panics
Panics if self.is_empty()
.
Trait Implementations
impl<T, N: Unsigned> AsRef<KdSliceN<T, N>> for KdTreeN<T, N>
[src]
impl<T, N: Unsigned> Borrow<KdSliceN<T, N>> for KdTreeN<T, N>
[src]
impl<T: Debug, N: Debug + Unsigned> Debug for KdSliceN<T, N>
[src]
impl<T, N: Unsigned> Deref for KdSliceN<T, N>
[src]
impl<T: Eq, N: Eq + Unsigned> Eq for KdSliceN<T, N>
[src]
impl<T: PartialEq, N: PartialEq + Unsigned> PartialEq<KdSliceN<T, N>> for KdSliceN<T, N>
[src]
pub fn eq(&self, other: &KdSliceN<T, N>) -> bool
[src]
pub fn ne(&self, other: &KdSliceN<T, N>) -> bool
[src]
impl<T, N: Unsigned> StructuralEq for KdSliceN<T, N>
[src]
impl<T, N: Unsigned> StructuralPartialEq for KdSliceN<T, N>
[src]
impl<T: Clone, N: Unsigned> ToOwned for KdSliceN<T, N>
[src]
Auto Trait Implementations
impl<T, N> RefUnwindSafe for KdSliceN<T, N> where
N: RefUnwindSafe,
T: RefUnwindSafe,
N: RefUnwindSafe,
T: RefUnwindSafe,
impl<T, N> Send for KdSliceN<T, N> where
N: Send,
T: Send,
N: Send,
T: Send,
impl<T, N> Sync for KdSliceN<T, N> where
N: Sync,
T: Sync,
N: Sync,
T: Sync,
impl<T, N> Unpin for KdSliceN<T, N> where
N: Unpin,
T: Unpin,
N: Unpin,
T: Unpin,
impl<T, N> UnwindSafe for KdSliceN<T, N> where
N: UnwindSafe,
T: UnwindSafe,
N: UnwindSafe,
T: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> Same<T> for T
[src]
type Output = T
Should always be Self
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,