//#####################################################################
// Copyright 2009, Jon Gretarsson.
// This file is part of PhysBAM whose distribution is governed by the license contained in the accompanying file PHYSBAM_COPYRIGHT.txt.
//#####################################################################
// Namespace INTERSECTION
//##################################################################### 
#include <Core/Intersections/BOX_SEGMENT_2D_INTERSECTION.h>
#include <Core/Basic_Geometry/RAY.h>
#include <Core/Math_Tools/RANGE.h>
namespace PhysBAM{
//#####################################################################
// Function Intersects
//#####################################################################
template<class T> bool Intersects(const RANGE<VECTOR<T,2> >& box,const SEGMENT_2D<T>& segment,const T thickness_over_two)
{
    if(!box.Outside(segment.X.x,thickness_over_two)) return true;
    if(!box.Outside(segment.X.y,thickness_over_two)) return true;
    RAY<VECTOR<T,2> > ray(segment.X.x,segment.X.y-segment.X.x);
    auto hit=Intersects(ray,box,thickness_over_two);
    return hit.Hit(segment.Length());
}
//#####################################################################
template bool Intersects(const RANGE<VECTOR<float,2> >&,const SEGMENT_2D<float>&,const float);
template bool Intersects(const RANGE<VECTOR<double,2> >&,const SEGMENT_2D<double>&,const double);
}
