From 290709ffe03b153f6d64599de6dca4ec2a7791a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lynn=20B=C3=BCttgenbach?= <62256001+lynn-lumen@users.noreply.github.com> Date: Fri, 11 Jul 2025 13:16:48 +0200 Subject: [PATCH] Implement `ShapeSample for Rhombus` --- .../bevy_math/src/sampling/shape_sampling.rs | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/crates/bevy_math/src/sampling/shape_sampling.rs b/crates/bevy_math/src/sampling/shape_sampling.rs index c17bc6fa76..65dcaa8aa1 100644 --- a/crates/bevy_math/src/sampling/shape_sampling.rs +++ b/crates/bevy_math/src/sampling/shape_sampling.rs @@ -224,6 +224,30 @@ impl ShapeSample for Annulus { } } +impl ShapeSample for Rhombus { + type Output = Vec2; + + fn sample_interior(&self, rng: &mut R) -> Vec2 { + let x: f32 = rng.gen_range(0.0..1.0); + let y: f32 = rng.gen_range(0.0..1.0); + let sign = if rng.r#gen() { Vec2::ONE } else { Vec2::new(-1.0, 1.0) }; + let p = if ops::abs(x) + ops::abs(y) > 1.0 { + Vec2::new(x, y) - Vec2::ONE + } else { + Vec2::new(x, y) + }; + p * sign * self.half_diagonals + } + + fn sample_boundary(&self, rng: &mut R) -> Vec2 { + let x: f32 = rng.gen_range(-1.0..=1.0); + let y_sign = if rng.r#gen() { -1.0 } else { 1.0 }; + + let y = (1.0 - ops::abs(x)) * y_sign; + Vec2::new(x, y) * self.half_diagonals + } +} + impl ShapeSample for Rectangle { type Output = Vec2;