ray_tracing_core/probability_density_function/
geometry_pdf.rs1use 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}