ray_tracing_core/probability_density_function/
geometry_pdf.rs

1use crate::geometry::Geometry;
2use crate::probability_density_function::ProbabilityDensityFunction;
3use crate::types::{FSize, Vector3};
4use std::sync::Arc;
5
6pub struct GeometryPdf {
7    pub origin: Vector3,
8    pub geometry: Arc<dyn Geometry>,
9}
10
11impl GeometryPdf {
12    pub fn new(origin: &Vector3, geometry: Arc<dyn Geometry>) -> GeometryPdf {
13        GeometryPdf {
14            origin: *origin,
15            geometry,
16        }
17    }
18}
19
20impl ProbabilityDensityFunction for GeometryPdf {
21    fn value(&self, direction: &Vector3) -> FSize {
22        self.geometry.pdf_value(&self.origin, direction)
23    }
24
25    fn generate(&self) -> Vector3 {
26        self.geometry.random(&self.origin)
27    }
28}