Calculer la distance entre deux points en Java

Calculer la distance entre deux points en Java

1. Vue d'ensemble

Dans ce rapide didacticiel, nous allons montrer comment calculer la distance entre deux points en Java.

2. La formule mathématique de la distance

Disons que nous avons deux points sur un plan: le premier point A a les coordonnées (x1, y1) et le second point B les coordonnées (x2, y2). Nous voulons calculer AB, la distance entre les points.

Tout d'abord, construisons un triangle rectangle avec l'hypoténuse AB:

image

Selon le théorème de Pythagore, la somme des carrés des longueurs des jambes du triangle est la même que le carré de la longueur de l’hypoténuse du triangle:AB2 = AC2 + CB2.

Deuxièmement, calculons AC et CB.

Évidemment:

AC = y2 - y1

De même:

BC = x2 - x1

Remplaçons les parties de l'équation:

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

Enfin, à partir de l'équation ci-dessus, nous pouvons calculer la distance entre les points:

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

Passons maintenant à la partie mise en œuvre.

3. Implémentation Java

3.1. Utilisation d'une formule simple

Bien que les spackages java.lang.Math etjava.awt.geom.Point2D fournissent des solutions prêtes, commençons par implémenter la formule ci-dessus telle quelle:

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

Pour tester la solution, prenons le triangle avec les branches3 et4 (comme indiqué dans l'image ci-dessus). Il est clair que le nombre5 convient comme valeur de l’hypoténuse:

3 * 3 + 4 * 4 = 5 * 5

Vérifions la solution:

@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. Utilisation du packagejava.lang.Math

Si le résultat de la multiplication dans la méthodecalculateDistanceBetweenPoints() est trop grand, un débordement peut se produire. Contrairement à cela, la méthodeMath.hypot() empêche les débordements ou sous-débordements intermédiaires:

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);
}

Prenons les mêmes points que précédemment et vérifions que la distance est la même:

@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. Utilisation du packagejava.awt.geom.Point2D

Enfin, calculons la distance avec la méthodePoint2D.distance():

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

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

Maintenant, testons la méthode de la même manière:

@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. Conclusion

Dans ce didacticiel, nous avons montré quelques façons de calculer la distance entre deux points en Java.

Comme toujours, le code utilisé dans les exemples est disponibleover on GitHub.