use nalgebra::{RealField, Unit, Vector3};
use crate::error::{GeometryError, Result};
#[derive(Debug, Clone)]
pub struct Hit<T: RealField + Copy> {
pub index: usize,
pub distance: T,
pub geometric_normal: Unit<Vector3<T>>,
pub interpolated_normal: Unit<Vector3<T>>,
}
impl<T: RealField + Copy> Hit<T> {
pub fn new(
index: usize,
distance: T,
geometric_normal: Unit<Vector3<T>>,
interpolated_normal: Unit<Vector3<T>>,
) -> Result<Self> {
if distance < T::zero() {
return Err(GeometryError::NegativeIntersectionDistance {
distance: distance.to_string(),
}
.into());
}
Ok(Self {
index,
distance,
geometric_normal,
interpolated_normal,
})
}
}