diff options
| author | Crozet Sébastien <developer@crozet.re> | 2020-09-22 15:29:29 +0200 |
|---|---|---|
| committer | Crozet Sébastien <developer@crozet.re> | 2020-09-28 15:27:25 +0200 |
| commit | a7d77a01447d2b77694b2a957d000790af60b383 (patch) | |
| tree | 7225a76f0e912651b2b115800bf0a620c44d6102 /src/geometry/waabb.rs | |
| parent | 56f6051b047aded906b8a89cbc66672c6f1e698e (diff) | |
| download | rapier-a7d77a01447d2b77694b2a957d000790af60b383.tar.gz rapier-a7d77a01447d2b77694b2a957d000790af60b383.tar.bz2 rapier-a7d77a01447d2b77694b2a957d000790af60b383.zip | |
Add non-topological WQuadtree update.
Diffstat (limited to 'src/geometry/waabb.rs')
| -rw-r--r-- | src/geometry/waabb.rs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/geometry/waabb.rs b/src/geometry/waabb.rs index c04514a..0a90801 100644 --- a/src/geometry/waabb.rs +++ b/src/geometry/waabb.rs @@ -150,6 +150,12 @@ impl WAABB { } } + pub fn dilate_by_factor(&mut self, factor: SimdFloat) { + let dilation = (self.maxs - self.mins) * factor; + self.mins -= dilation; + self.maxs += dilation; + } + pub fn replace(&mut self, i: usize, aabb: AABB<f32>) { self.mins.replace(i, aabb.mins); self.maxs.replace(i, aabb.maxs); @@ -192,6 +198,24 @@ impl WAABB { } #[cfg(feature = "dim2")] + pub fn contains_lanewise(&self, other: &WAABB) -> SimdBool { + self.mins.x.simd_le(other.mins.x) + & self.mins.y.simd_le(other.mins.y) + & self.maxs.x.simd_ge(other.maxs.x) + & self.maxs.y.simd_ge(other.maxs.y) + } + + #[cfg(feature = "dim3")] + pub fn contains_lanewise(&self, other: &WAABB) -> SimdBool { + self.mins.x.simd_le(other.mins.x) + & self.mins.y.simd_le(other.mins.y) + & self.mins.z.simd_le(other.mins.z) + & self.maxs.x.simd_ge(other.maxs.x) + & self.maxs.y.simd_ge(other.maxs.y) + & self.maxs.z.simd_ge(other.maxs.z) + } + + #[cfg(feature = "dim2")] pub fn intersects_lanewise(&self, other: &WAABB) -> SimdBool { self.mins.x.simd_le(other.maxs.x) & other.mins.x.simd_le(self.maxs.x) @@ -208,6 +232,13 @@ impl WAABB { & self.mins.z.simd_le(other.maxs.z) & other.mins.z.simd_le(self.maxs.z) } + + pub fn to_merged_aabb(&self) -> AABB<f32> { + AABB::new( + self.mins.coords.map(|e| e.simd_horizontal_min()).into(), + self.maxs.coords.map(|e| e.simd_horizontal_max()).into(), + ) + } } #[cfg(feature = "simd-is-enabled")] |
