use nalgebra::RealField;
use crate::{
error::Result,
rt::{Hit, Ray},
};
pub trait Traceable<T: RealField + Copy> {
fn intersect(&self, ray: &Ray<T>) -> Result<Option<Hit<T>>>;
fn intersect_any(&self, ray: &Ray<T>, max_distance: T) -> Result<bool> {
(self.intersect(ray)?).map_or(Ok(false), |hit| Ok(hit.distance <= max_distance))
}
}