internal static bool LineLineIntersection(double2 a0, double2 a1, double2 b0, double2 b1) { var x0 = UTess.OrientFastDouble(a0, b0, b1); var y0 = UTess.OrientFastDouble(a1, b0, b1); if ((x0 > kEpsilon && y0 > kEpsilon) || (x0 < -kEpsilon && y0 < -kEpsilon)) { return(false); } var x1 = UTess.OrientFastDouble(b0, a0, a1); var y1 = UTess.OrientFastDouble(b1, a0, a1); if ((x1 > kEpsilon && y1 > kEpsilon) || (x1 < -kEpsilon && y1 < -kEpsilon)) { return(false); } // Check for degenerate collinear case if (math.abs(x0) < kEpsilon && math.abs(y0) < kEpsilon && math.abs(x1) < kEpsilon && math.abs(y1) < kEpsilon) { return(CheckCollinear(a0, a1, b0, b1)); } return(true); }