//#####################################################################
// 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_LINE_2D_INTERSECTION.h>
#include <Core/Basic_Geometry/LINE_2D.h>
#include <Core/Math_Tools/RANGE.h>
namespace PhysBAM{
//#####################################################################
// Function Intersects
//#####################################################################
template<class T> bool Intersects(const RANGE<VECTOR<T,2> >& box,const LINE_2D<T>& line,const T thickness_over_two)
{
    bool points_on_positive_side=false,points_on_negative_side=false;
    for(int i=0;i<2;i++)for(int j=0;j<2;j++){
        VECTOR<T,2> test_point(i?box.min_corner.x:box.max_corner.x,j?box.min_corner.y:box.max_corner.y);
        T distance=line.normal.Dot(test_point-line.x0);
        if(distance>-thickness_over_two) points_on_positive_side=true;
        if(distance<thickness_over_two) points_on_negative_side=true;}
    return points_on_positive_side&&points_on_negative_side;
}
//#####################################################################
template bool Intersects(const RANGE<VECTOR<float,2> >&,const LINE_2D<float>&,const float);
template bool Intersects(const RANGE<VECTOR<double,2> >&,const LINE_2D<double>&,const double);
}
