conspire/geometry/bbox/unite/
mod.rs1#[cfg(test)]
2pub mod test;
3
4use crate::{
5 geometry::bbox::{BoundingBox, Unite},
6 math::Tensor,
7};
8
9impl<const D: usize> Unite<Self> for BoundingBox<D> {
10 type Output = Self;
11 fn unite(self, other: Self) -> Self::Output {
12 let mut minimum = self.minimum;
13 let mut maximum = self.maximum;
14 minimum
15 .iter_mut()
16 .zip(other.minimum)
17 .zip(maximum.iter_mut().zip(other.maximum))
18 .for_each(|((min, other_min), (max, other_max))| {
19 *min = min.min(other_min);
20 *max = max.max(other_max);
21 });
22 Self { minimum, maximum }
23 }
24}
25
26impl<const D: usize> Unite<BoundingBox<D>> for &BoundingBox<D> {
27 type Output = BoundingBox<D>;
28 fn unite(self, other: BoundingBox<D>) -> Self::Output {
29 let mut minimum = self.minimum.clone();
30 let mut maximum = self.maximum.clone();
31 minimum
32 .iter_mut()
33 .zip(other.minimum)
34 .zip(maximum.iter_mut().zip(other.maximum))
35 .for_each(|((min, other_min), (max, other_max))| {
36 *min = min.min(other_min);
37 *max = max.max(other_max);
38 });
39 BoundingBox { minimum, maximum }
40 }
41}
42
43impl<const D: usize> Unite<&Self> for BoundingBox<D> {
44 type Output = Self;
45 fn unite(self, other: &Self) -> Self::Output {
46 let mut minimum = self.minimum;
47 let mut maximum = self.maximum;
48 minimum
49 .iter_mut()
50 .zip(other.minimum.iter())
51 .zip(maximum.iter_mut().zip(other.maximum.iter()))
52 .for_each(|((min, &other_min), (max, &other_max))| {
53 *min = min.min(other_min);
54 *max = max.max(other_max);
55 });
56 Self { minimum, maximum }
57 }
58}
59
60impl<const D: usize> Unite<Self> for &BoundingBox<D> {
61 type Output = BoundingBox<D>;
62 fn unite(self, other: Self) -> Self::Output {
63 let mut minimum = self.minimum.clone();
64 let mut maximum = self.maximum.clone();
65 minimum
66 .iter_mut()
67 .zip(other.minimum.iter())
68 .zip(maximum.iter_mut().zip(other.maximum.iter()))
69 .for_each(|((min, &other_min), (max, &other_max))| {
70 *min = min.min(other_min);
71 *max = max.max(other_max);
72 });
73 BoundingBox { minimum, maximum }
74 }
75}