Berechne den Abstand zwischen zwei Punkten in Java

Berechnen Sie den Abstand zwischen zwei Punkten in Java

1. Überblick

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

2. Die mathematische Formel der Distanz

Nehmen wir an, 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.

Erstellen wir zunächst ein rechtwinkliges Dreieck mit der Hypotenuse AB:

image

Nach dem Satz von Pythagoras entspricht die Summe der Quadrate der Längen der Beine des Dreiecks der Quadrate 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 java.lang.Math undjava.awt.geom.Point2D packages 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 Beinen3 und4 (wie in der Abbildung oben gezeigt). Es ist klar, dass die Zahl5 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 Paketsjava.lang.Math

Wenn das Ergebnis der Multiplikation in dercalculateDistanceBetweenPoints()-Methode zu groß ist, kann ein Überlauf auftreten. Im Gegensatz dazu verhindert die Methode vonMath.hypot()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 Paketsjava.awt.geom.Point2D

Berechnen wir abschließend die Entfernung mit der MethodePoint2D.distance():

public double calculateDistanceBetweenPointsWithPoint2D(
    double x1,
    double y1,
    double x2,
    double y2) {

    return Point2D.distance(x1, y1, x2, y2);
}

Testen wir die Methode nun auf die gleiche Weise:

@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 Codeover on GitHub verfügbar.