Java Line/Line Intersections #

I've been working on a project for which I need to do some graphics-y things in Java, using the AWT portions of the Java libraries. Although Sun has been nice enough to include an intersectsLine method in the Line2D class, it simply does a boolean test, and doesn't actually return the intersection point. As a result, I've had to write up the following:

static boolean getLineLineIntersection(Line2D.Double l1,
                                       Line2D.Double l2,
                                       Point2D.Double intersection)
{
    if (!l1.intersectsLine(l2))
        return false;
        
    double  x1 = l1.getX1(), y1 = l1.getY1(),
            x2 = l1.getX2(), y2 = l1.getY2(),
            x3 = l2.getX1(), y3 = l2.getY1(),
            x4 = l2.getX2(), y4 = l2.getY2();
    
    intersection.x = det(det(x1, y1, x2, y2), x1 - x2,
                         det(x3, y3, x4, y4), x3 - x4)/
                     det(x1 - x2, y1 - y2, x3 - x4, y3 - y4);
    intersection.y = det(det(x1, y1, x2, y2), y1 - y2,
                         det(x3, y3, x4, y4), y3 - y4)/
                     det(x1 - x2, y1 - y2, x3 - x4, y3 - y4);

    return true;
}

static double det(double a, double b, double c, double d)
{
    return a * d - b * c;
}

The line intersection method is from MathWorld.

Post a Comment