pub trait Envelope: Clone + Copy + PartialEq + Debug {
type Point: Point;
Show 14 methods
fn new_empty() -> Self;
fn contains_point(&self, point: &Self::Point) -> bool;
fn contains_envelope(&self, aabb: &Self) -> bool;
fn merge(&mut self, other: &Self);
fn merged(&self, other: &Self) -> Self;
fn intersects(&self, other: &Self) -> bool;
fn intersection_area(&self, other: &Self) -> <Self::Point as Point>::Scalar;
fn area(&self) -> <Self::Point as Point>::Scalar;
fn distance_2(&self, point: &Self::Point) -> <Self::Point as Point>::Scalar;
fn min_max_dist_2(
&self,
point: &Self::Point
) -> <Self::Point as Point>::Scalar;
fn center(&self) -> Self::Point;
fn margin_value(&self) -> <Self::Point as Point>::Scalar;
fn sort_envelopes<T: RTreeObject<Envelope = Self>>(
axis: usize,
envelopes: &mut [T]
);
fn partition_envelopes<T: RTreeObject<Envelope = Self>>(
axis: usize,
envelopes: &mut [T],
selection_size: usize
);
}
Expand description
An envelope type that encompasses some child nodes.
An envelope defines how different bounding boxes of inserted children in an r-tree can interact, e.g. how they can be merged or intersected. This trait is not meant to be implemented by the user. Currently, only one implementation exists (AABB)[struct.AABB.html] and should be used, but more implementations are possible.
Required Associated Types
Required Methods
sourcefn contains_point(&self, point: &Self::Point) -> bool
fn contains_point(&self, point: &Self::Point) -> bool
Returns true if a point is contained within this envelope.
sourcefn contains_envelope(&self, aabb: &Self) -> bool
fn contains_envelope(&self, aabb: &Self) -> bool
Returns true if another envelope is fully contained within self
.
sourcefn merged(&self, other: &Self) -> Self
fn merged(&self, other: &Self) -> Self
Returns the minimal envelope containing self
and another envelope.
sourcefn intersects(&self, other: &Self) -> bool
fn intersects(&self, other: &Self) -> bool
Sets self
to the intersection of self
and another envelope.
sourcefn intersection_area(&self, other: &Self) -> <Self::Point as Point>::Scalar
fn intersection_area(&self, other: &Self) -> <Self::Point as Point>::Scalar
Returns the area of the intersection of self
and another envelope.
sourcefn area(&self) -> <Self::Point as Point>::Scalar
fn area(&self) -> <Self::Point as Point>::Scalar
Returns this envelope’s area. Must be at least 0.
sourcefn distance_2(&self, point: &Self::Point) -> <Self::Point as Point>::Scalar
fn distance_2(&self, point: &Self::Point) -> <Self::Point as Point>::Scalar
Returns the euclidean distance to the envelope’s border.
sourcefn min_max_dist_2(&self, point: &Self::Point) -> <Self::Point as Point>::Scalar
fn min_max_dist_2(&self, point: &Self::Point) -> <Self::Point as Point>::Scalar
Returns the squared min-max distance, a concept that helps to find nearest neighbors efficiently.
Visually, if an AABB and a point are given, the min-max distance returns the distance at which we surely know an element must be present. This serves as an upper bound during nearest neighbor search.
References
Roussopoulos, Nick, Stephen Kelley, and Frédéric Vincent. “Nearest neighbor queries.” ACM sigmod record. Vol. 24. No. 2. ACM, 1995.
sourcefn margin_value(&self) -> <Self::Point as Point>::Scalar
fn margin_value(&self) -> <Self::Point as Point>::Scalar
Returns a value proportional to the envelope’s margin.
sourcefn sort_envelopes<T: RTreeObject<Envelope = Self>>(
axis: usize,
envelopes: &mut [T]
)
fn sort_envelopes<T: RTreeObject<Envelope = Self>>(
axis: usize,
envelopes: &mut [T]
)
Sorts a given set of objects with envelopes along one of their axis.
sourcefn partition_envelopes<T: RTreeObject<Envelope = Self>>(
axis: usize,
envelopes: &mut [T],
selection_size: usize
)
fn partition_envelopes<T: RTreeObject<Envelope = Self>>(
axis: usize,
envelopes: &mut [T],
selection_size: usize
)
Partitions objects with an envelopes along a certain axis.
After calling this, envelopes[0..selection_size] are all smaller than envelopes[selection_size + 1..].