Better code reuse, almost generic over dimensions

This commit is contained in:
2021-12-29 14:19:58 +01:00
parent fd26f58e25
commit 3accf9845d

View File

@@ -61,55 +61,33 @@ impl Cuboid {
return true; return true;
} }
if other.lower[0] > self.lower[0] { let mut lower = self.lower;
// We have a set of X-coordinates below the overlap, add a cube for that let mut upper = self.upper;
new_cubes.push(Self::new_internal(
self.lower,
[other.lower[0], self.upper[1], self.upper[2]],
));
}
if other.upper[0] < self.upper[0] { for axis in 0..3 {
// Similarly, we can remove an upper section. if other.lower[axis] > self.lower[axis] {
new_cubes.push(Self::new_internal( let mut new_upper = upper;
[other.upper[0], self.lower[1], self.lower[2]], new_upper[axis] = other.lower[axis];
self.upper,
));
}
// Now we can fix the X-coordinates of the overlap section new_cubes.push(Cuboid {
let overlap_xl = self.lower[0].max(other.lower[0]); lower,
let overlap_xh = self.upper[0].min(other.upper[0]); upper: new_upper,
});
// Same strategy for the Y axis lower[axis] = other.lower[axis];
if other.lower[1] > self.lower[1] { }
new_cubes.push(Self::new_internal(
[overlap_xl, self.lower[1], self.lower[2]],
[overlap_xh, other.lower[1], self.upper[2]],
))
}
if other.upper[1] < self.upper[1] {
new_cubes.push(Self::new_internal(
[overlap_xl, other.upper[1], self.lower[2]],
[overlap_xh, self.upper[1], self.upper[2]],
))
}
let overlap_yl = self.lower[1].max(other.lower[1]); if other.upper[axis] < self.upper[axis] {
let overlap_yh = self.upper[1].min(other.upper[1]); let mut new_lower = lower;
new_lower[axis] = other.upper[axis];
// Finally, handle the last axis new_cubes.push(Cuboid {
if other.lower[2] > self.lower[2] { lower: new_lower,
new_cubes.push(Self::new_internal( upper,
[overlap_xl, overlap_yl, self.lower[2]], });
[overlap_xh, overlap_yh, other.lower[2]],
)) upper[axis] = other.upper[axis];
} }
if other.upper[2] < self.upper[2] {
new_cubes.push(Self::new_internal(
[overlap_xl, overlap_yl, other.upper[2]],
[overlap_xh, overlap_yh, self.upper[2]],
))
} }
false false