del-geo 0.1.25

2D/3D geometry utility codes
Documentation
use num_traits::Zero;
pub fn is_intersect_ray<const NDIM: usize, const SIZE_AABB: usize>(
    aabb: &[f32; SIZE_AABB],
    ray_org: &[f32; NDIM],
    ray_dir: &[f32; NDIM]) -> bool
{
    assert_eq!(NDIM*2, SIZE_AABB);
    let mut tmin = -f32::INFINITY;
    let mut tmax = f32::INFINITY;
    for i_dim in 0..NDIM {
        if !ray_dir[i_dim].abs().is_zero() {
            let t1 = (aabb[i_dim] - ray_org[i_dim]) / ray_dir[i_dim];
            let t2 = (aabb[i_dim+NDIM] - ray_org[i_dim]) / ray_dir[i_dim];
            tmin = tmin.max(t1.min(t2));
            tmax = tmax.min(t1.max(t2));
        } else if ray_org[i_dim] < aabb[i_dim] || ray_org[i_dim] > aabb[i_dim+NDIM] {
            return false;
        }
    }
    tmax >= tmin && tmax >= 0.0
}