aboutsummaryrefslogtreecommitdiff
path: root/rand/src/distributions/unit_sphere.rs
diff options
context:
space:
mode:
Diffstat (limited to 'rand/src/distributions/unit_sphere.rs')
-rw-r--r--rand/src/distributions/unit_sphere.rs9
1 files changed, 4 insertions, 5 deletions
diff --git a/rand/src/distributions/unit_sphere.rs b/rand/src/distributions/unit_sphere.rs
index 61cbda5..37de88b 100644
--- a/rand/src/distributions/unit_sphere.rs
+++ b/rand/src/distributions/unit_sphere.rs
@@ -28,23 +28,22 @@ use distributions::{Distribution, Uniform};
/// Sphere.*](https://doi.org/10.1214/aoms/1177692644)
/// Ann. Math. Statist. 43, no. 2, 645--646.
#[derive(Clone, Copy, Debug)]
-pub struct UnitSphereSurface {
- uniform: Uniform<f64>,
-}
+pub struct UnitSphereSurface;
impl UnitSphereSurface {
/// Construct a new `UnitSphereSurface` distribution.
#[inline]
pub fn new() -> UnitSphereSurface {
- UnitSphereSurface { uniform: Uniform::new(-1., 1.) }
+ UnitSphereSurface
}
}
impl Distribution<[f64; 3]> for UnitSphereSurface {
#[inline]
fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> [f64; 3] {
+ let uniform = Uniform::new(-1., 1.);
loop {
- let (x1, x2) = (self.uniform.sample(rng), self.uniform.sample(rng));
+ let (x1, x2) = (uniform.sample(rng), uniform.sample(rng));
let sum = x1*x1 + x2*x2;
if sum >= 1. {
continue;