28 const double nNorm(Normal.norm());
29 assert(nNorm>FLT_EPSILON &&
"PLANE MUST HAVE NON-ZERO NORMAL");
37 const double edgeNorm=(v1-v0).norm();
38 if(edgeNorm<FLT_EPSILON)
41 if(fabs((P0-vM).dot(n))<FLT_EPSILON)
43 return std::make_tuple(
INCIDENT,vM,vM);
47 return std::make_tuple(
OFFSET,VectorDimD::Zero(),VectorDimD::Zero());
52 const double den=(v1-v0).dot(n);
53 const double num=(P0-v0).dot(n);
55 if (fabs(
den/edgeNorm)>FLT_EPSILON)
60 if(fabs(
u)<FLT_EPSILON)
62 return std::make_tuple(
INCIDENT,v0,v0);
64 else if (
u>=FLT_EPSILON &&
u<=1.0-FLT_EPSILON)
69 else if (fabs(1.0-
u)<FLT_EPSILON)
71 return std::make_tuple(
INCIDENT,v1,v1);
75 return std::make_tuple(
OFFSET,VectorDimD::Zero(),VectorDimD::Zero());
81 const double P0v0norm=(P0-v0).norm();
82 const double numCheck= (P0v0norm<FLT_EPSILON)? 0.0 :
num/P0v0norm;
83 if (fabs(numCheck)>FLT_EPSILON)
85 return std::make_tuple(
PARALLEL,VectorDimD::Zero(),VectorDimD::Zero());