lbf/samplers/
uniform_rect_sampler.rs1use crate::samplers::rotation_distr::UniformRotDistr;
2use jagua_rs::entities::Item;
3use jagua_rs::geometry::DTransformation;
4use jagua_rs::geometry::primitives::Rect;
5use rand::Rng;
6use rand_distr::Distribution;
7use rand_distr::Uniform;
8
9pub struct UniformRectSampler {
11 pub bbox: Rect,
12 pub uniform_x: Uniform<f32>,
13 pub uniform_y: Uniform<f32>,
14 pub uniform_r: UniformRotDistr,
15}
16
17impl UniformRectSampler {
18 pub fn new(bbox: Rect, item: &Item) -> Self {
19 let uniform_x = Uniform::new(bbox.x_min, bbox.x_max).unwrap();
20 let uniform_y = Uniform::new(bbox.y_min, bbox.y_max).unwrap();
21 let uniform_r = UniformRotDistr::from_item(item);
22 Self {
23 bbox,
24 uniform_x,
25 uniform_y,
26 uniform_r,
27 }
28 }
29
30 pub fn sample(&self, rng: &mut impl Rng) -> DTransformation {
31 let r_sample = self.uniform_r.sample(rng);
32 let x_sample = self.uniform_x.sample(rng);
33 let y_sample = self.uniform_y.sample(rng);
34
35 DTransformation::new(r_sample, (x_sample, y_sample))
36 }
37}