pub struct KdTree<T: Float> { /* private fields */ }Expand description
A KD-tree for efficient spatial queries.
Points are stored as a flat Vec<T> with known dimensionality. The tree
structure is a recursive enum of internal split nodes and leaf nodes.
§Examples
use scivex_core::spatial::KdTree;
let points: Vec<Vec<f64>> = vec![
vec![0.0, 0.0],
vec![1.0, 0.0],
vec![0.0, 1.0],
vec![1.0, 1.0],
];
let refs: Vec<&[f64]> = points.iter().map(|p| p.as_slice()).collect();
let tree = KdTree::build(&refs).unwrap();
let (indices, dists) = tree.query(&[0.1, 0.1], 1).unwrap();
assert_eq!(indices[0], 0);Implementations§
Source§impl<T: Float> KdTree<T>
impl<T: Float> KdTree<T>
Sourcepub fn build(points: &[&[T]]) -> Result<Self>
pub fn build(points: &[&[T]]) -> Result<Self>
Build a KD-tree from a set of points.
points is a slice of point slices, each of length dim.
§Errors
Returns CoreError::InvalidArgument if points is empty or if the
point slices have inconsistent lengths.
Sourcepub fn from_tensor(tensor: &Tensor<T>) -> Result<Self>
pub fn from_tensor(tensor: &Tensor<T>) -> Result<Self>
Build from a 2D tensor where each row is a point.
§Errors
Returns an error if the tensor is not 2-dimensional or is empty.
Sourcepub fn query(&self, query: &[T], k: usize) -> Result<(Vec<usize>, Vec<T>)>
pub fn query(&self, query: &[T], k: usize) -> Result<(Vec<usize>, Vec<T>)>
Find the k nearest neighbors to query.
Returns (indices, distances) sorted by distance (ascending).
§Errors
Returns an error if k == 0 or the query dimension does not match.
Sourcepub fn query_radius(
&self,
query: &[T],
radius: T,
) -> Result<(Vec<usize>, Vec<T>)>
pub fn query_radius( &self, query: &[T], radius: T, ) -> Result<(Vec<usize>, Vec<T>)>
Find all points within distance radius of query.
Returns (indices, distances).
§Errors
Returns an error if the query dimension does not match.
Sourcepub fn query_pairs(&self, r: T) -> Vec<(usize, usize)>
pub fn query_pairs(&self, r: T) -> Vec<(usize, usize)>
Find all pairs of points within distance r of each other.
Returns pairs as (i, j) with i < j.