use crate::core::Vector2f; use crate::Float; use super::Sampler; use rand::prelude::*; use rand::distributions::Uniform; use rand_pcg::Pcg32; #[derive(Clone)] pub struct UniformSampler { r: Pcg32, d: Uniform, } impl UniformSampler { pub fn new() -> Self { Self { r: Pcg32::seed_from_u64(1), d: Uniform::from(0.0..1.0), } } } impl Sampler for UniformSampler { fn get_sample(&mut self) -> Float { self.d.sample(&mut self.r) } fn get_sample_2d(&mut self) -> Vector2f { Vector2f::new_xy(self.get_sample(), self.get_sample()) } }