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);
        }