All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.datafx.flow.wysiwyg.netview.MathUtils Maven / Gradle / Ivy

The newest version!
package org.datafx.flow.wysiwyg.netview;


import javafx.geometry.Point2D;

public class MathUtils {

    public static Point2D intersectLines(Point2D line1Start, Point2D line1End, Point2D line2Start, Point2D line2End)throws IllegalArgumentException
    {
        // Wegen der Lesbarkeit
        double x1 = line1Start.getX();
        double x2 = line1End.getX();
        double y1 = line1Start.getY();
        double y2 = line1End.getY();

        double x3 = line2Start.getX();
        double x4 = line2End.getX();
        double y3 = line2Start.getY();
        double y4 = line2End.getY();

        // Zaehler
        double zx = (x1 * y2 - y1 * x2)*(x3-x4) - (x1 - x2) * (x3 * y4 - y3 * x4);
        double zy = (x1 * y2 - y1 * x2)*(y3-y4) - (y1 - y2) * (x3 * y4 - y3 * x4);

        // Nenner
        double n = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);

        // Koordinaten des Schnittpunktes
        double x = zx/n;
        double y = zy/n;

        // Vielleicht ist bei der Division durch n etwas schief gelaufen
        if (Double.isNaN(x)& Double.isNaN(y))
        {
            throw new IllegalArgumentException("Schnittpunkt nicht eindeutig.");
        }
        // Test ob der Schnittpunkt auf den angebenen Strecken liegt oder außerhalb.
        if ((x - x1) / (x2 - x1) > 1 || (x - x3) / (x4 - x3) > 1 || (y - y1) / (y2 - y1) > 1 || (y - y3) / (y4 - y3) > 1 )
        {
            throw new IllegalArgumentException("Schnittpunkt liegt außerhalb.");
        }
        return new Point2D(x,y);
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy