Berechnen Sie den Abstand zwischen zwei Punkten in Java

1. Übersicht

In diesem kurzen Tutorial zeigen wir Ihnen, wie Sie den Abstand zwischen zwei Punkten in Java berechnen.

2. Die mathematische Formel der Distanz

Angenommen, wir haben zwei Punkte auf einer Ebene: Der erste Punkt A hat die Koordinaten (x1, y1) und der zweite Punkt B hat die Koordinaten (x2, y2). Wir wollen AB berechnen, den Abstand zwischen den Punkten.

Lassen Sie uns zunächst ein rechtwinkliges Dreieck mit der Hypotenuse AB bilden:

Nach dem Satz von Pythagoras ist die Summe der Quadrate der Längen der Beine des Dreiecks dieselbe wie das Quadrat der Länge der Hypotenuse des Dreiecks: AB2 = AC2 + CB2 .

Zweitens berechnen wir AC und CB.

Offensichtlich:

AC = y2 - y1

Ähnlich:

BC = x2 - x1

Ersetzen wir die Teile der Gleichung:

distance * distance = (y2 - y1) * (y2 - y1) + (x2 - x1) * (x2 - x1)

Schließlich können wir aus der obigen Gleichung den Abstand zwischen den Punkten berechnen:

distance = sqrt((y2 - y1) * (y2 - y1) + (x2 - x1) * (x2 - x1))

Fahren wir nun mit dem Implementierungsteil fort.

3. Java-Implementierung

3.1. Verwenden der einfachen Formel

Obwohl die Pakete java.lang.Math und java.awt.geom.Point2D fertige Lösungen bieten, implementieren wir zunächst die obige Formel wie folgt:

public double calculateDistanceBetweenPoints( double x1, double y1, double x2, double y2) { return Math.sqrt((y2 - y1) * (y2 - y1) + (x2 - x1) * (x2 - x1)); }

Um die Lösung zu testen, nehmen wir das Dreieck mit den Beinen 3 und 4 (wie in der Abbildung oben gezeigt). Es ist klar, dass die Zahl 5 als Wert der Hypotenuse geeignet ist:

3 * 3 + 4 * 4 = 5 * 5

Lassen Sie uns die Lösung überprüfen:

@Test public void givenTwoPoints_whenCalculateDistanceByFormula_thenCorrect() { double x1 = 3; double y1 = 4; double x2 = 7; double y2 = 1; double distance = service.calculateDistanceBetweenPoints(x1, y1, x2, y2); assertEquals(distance, 5, 0.001); }

3.2. Verwenden des java.lang.Math- Pakets

Wenn das Ergebnis der Multiplikation in der Methode berechneDistanzBetweenPoints () zu groß ist, kann ein Überlauf auftreten. Im Gegensatz dazu verhindert die Math.hypot () -Methode einen Zwischenüberlauf oder -unterlauf :

public double calculateDistanceBetweenPointsWithHypot( double x1, double y1, double x2, double y2) { double ac = Math.abs(y2 - y1); double cb = Math.abs(x2 - x1); return Math.hypot(ac, cb); }

Nehmen wir die gleichen Punkte wie zuvor und überprüfen Sie, ob der Abstand gleich ist:

@Test public void givenTwoPoints_whenCalculateDistanceWithHypot_thenCorrect() { double x1 = 3; double y1 = 4; double x2 = 7; double y2 = 1; double distance = service.calculateDistanceBetweenPointsWithHypot(x1, y1, x2, y2); assertEquals(distance, 5, 0.001); }

3.3. Verwenden des Pakets java.awt.geom.Point2D

Berechnen wir abschließend die Entfernung mit der Point2D.distance () -Methode:

public double calculateDistanceBetweenPointsWithPoint2D( double x1, double y1, double x2, double y2) { return Point2D.distance(x1, y1, x2, y2); }

Lassen Sie uns nun die Methode auf die gleiche Weise testen:

@Test public void givenTwoPoints_whenCalculateDistanceWithPoint2D_thenCorrect() { double x1 = 3; double y1 = 4; double x2 = 7; double y2 = 1; double distance = service.calculateDistanceBetweenPointsWithPoint2D(x1, y1, x2, y2); assertEquals(distance, 5, 0.001); }

4. Fazit

In diesem Tutorial haben wir einige Möglichkeiten gezeigt, wie Sie den Abstand zwischen zwei Punkten in Java berechnen können.

Wie immer ist der in den Beispielen verwendete Code auf GitHub verfügbar.