Beispiel #1
0
        bool intersect(GeoPoint a, GeoPoint b, GeoPoint c, GeoPoint d)
        {
            if (!intersect_1d(a.x, b.x, c.x, d.x) || !intersect_1d(a.y, b.y, c.y, d.y))
            {
                return(false);
            }
            line   m  = new line(a, b);
            line   n  = new line(c, d);
            double zn = det(m.a, m.b, n.a, n.b);

            if (Math.Abs(zn) < GeoPoint.EPS)
            {
                return(!(Math.Abs(m.dist(c)) > GeoPoint.EPS || Math.Abs(n.dist(a)) > GeoPoint.EPS));
            }
            else
            {
                double xx = -det(m.c, m.b, n.c, n.b) / zn;
                double yy = -det(m.a, m.c, n.a, n.c) / zn;
                return(betw(a.x, b.x, xx) &&
                       betw(a.y, b.y, yy) &&
                       betw(c.x, d.x, xx) &&
                       betw(c.y, d.y, yy));
            }
        }