use crate::core::filter::Filter;
use crate::core::geometry::Point2f;
use crate::core::geometry::Vector2f;
use crate::core::paramset::ParamSet;
use crate::Float;
pub struct BoxFilter {
radius: Vector2f,
inv_radius: Vector2f,
}
impl BoxFilter {
pub fn new(radius: Vector2f) -> Self {
Self {
radius,
inv_radius: [1. / radius.x, 1. / radius.y].into(),
}
}
pub fn create_box_filter(ps: &ParamSet) -> Self {
let xw = ps.find_one_float("xwidth", 0.5);
let yw = ps.find_one_float("ywidth", 0.5);
BoxFilter::new([xw, yw].into())
}
}
impl Filter for BoxFilter {
fn evaluate(&self, _: Point2f) -> Float {
1.
}
fn radius(&self) -> Vector2f {
self.radius
}
fn inv_radius(&self) -> Vector2f {
self.inv_radius
}
}