Finden Sie den Schnittpunkt zweier Linien in Java

1. Übersicht

In diesem kurzen Tutorial zeigen wir, wie Sie den Schnittpunkt zweier Linien finden, die durch die linearen Funktionen in der Steigungsschnittform definiert sind.

2. Die mathematische Schnittformel

Jede gerade Linie (außer vertikal) in einer Ebene kann durch die lineare Funktion definiert werden:

y = mx + b

Dabei ist m die Steigung und b der y-Achsenabschnitt.

Für eine vertikale Linie wäre m gleich unendlich, deshalb schließen wir es aus. Wenn zwei Linien parallel sind, haben sie die gleiche Steigung, dh den gleichen Wert von m .

Nehmen wir an, wir haben zwei Zeilen. Die erste Funktion definiert die erste Zeile:

y = m1x + b1

Und die zweite Funktion definiert die zweite Zeile:

y = m2x + b2

Wir wollen den Schnittpunkt dieser Linien finden. Offensichtlich gilt die Gleichung für den Schnittpunkt:

y1 = y2

Ersetzen wir y- Variablen:

m1x + b1 = m2x + b2

Aus der obigen Gleichung können wir die x- Koordinate finden:

x(m1 - m2) = b2 - b1 x = (b2 - b1) / (m1 - m2)

Schließlich können wir die y-Koordinate des Schnittpunkts finden:

y = m1x + b1

Fahren wir nun mit dem Implementierungsteil fort.

3. Java-Implementierung

Erstens haben wir vier Eingangsvariablen - m1, b1 für die erste Zeile und m2, b2 für die zweite Zeile.

Zweitens konvertieren wir den berechneten Schnittpunkt in das Objekt vom Typ java.awt.Point .

Schließlich können Linien parallel sein, daher machen wir den zurückgegebenen Wert optional :

public Optional calculateIntersectionPoint( double m1, double b1, double m2, double b2) { if (m1 == m2) { return Optional.empty(); } double x = (b2 - b1) / (m1 - m2); double y = m1 * x + b1; Point point = new Point(); point.setLocation(x, y); return Optional.of(point); }

Wählen wir nun einige Werte aus und testen die Methode für parallele und nicht parallele Linien.

Nehmen wir zum Beispiel die x- Achse ( y = 0 ) als erste Zeile und die durch y = x - 1 definierte Zeile als zweite Zeile.

Für die zweite Linie ist die Steigung m gleich 1, was 45 Grad bedeutet , und der y- Achsenabschnitt ist gleich -1, was bedeutet, dass die Linie die y- Achse im Punkt (0, -1) schneidet.

Es ist intuitiv klar, dass der Schnittpunkt der zweiten Linie mit der x- Achse (1,0 ) sein muss:

Lass es uns überprüfen.

Stellen Sie zunächst sicher, dass ein Punkt vorhanden ist, da die Linien nicht parallel sind, und überprüfen Sie dann die Werte von x und y :

@Test public void givenNotParallelLines_whenCalculatePoint_thenPresent() { double m1 = 0; double b1 = 0; double m2 = 1; double b2 = -1; Optional point = service.calculateIntersectionPoint(m1, b1, m2, b2); assertTrue(point.isPresent()); assertEquals(point.get().getX(), 1, 0.001); assertEquals(point.get().getY(), 0, 0.001); }

Zuletzt nehmen wir zwei parallele Linien und stellen sicher, dass der zurückgegebene Wert leer ist:

@Test public void givenParallelLines_whenCalculatePoint_thenEmpty() { double m1 = 1; double b1 = 0; double m2 = 1; double b2 = -1; Optional point = service.calculateIntersectionPoint(m1, b1, m2, b2); assertFalse(point.isPresent()); }

4. Fazit

In diesem Tutorial haben wir gezeigt, wie der Schnittpunkt zweier Linien berechnet wird.

Wie üblich ist der vollständige Quellcode auf GitHub verfügbar.