Calculer la distance entre deux points en Java

1. Vue d'ensemble

Dans ce tutoriel rapide, nous montrerons 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 deuxième point B a 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:

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 implémentation.

3. Implémentation Java

3.1. Utilisation d'une formule simple

Bien que les packages java.lang.Math et java.awt.geom.Point2D fournissent des solutions prêtes, implémentons d'abord 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 jambes 3 et 4 (comme indiqué sur l'image ci-dessus). Il est clair que le nombre 5 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 package java.lang.Math

Si le résultat de la multiplication dans la méthode CalculateDistanceBetweenPoints () est trop grand, un débordement peut se produire. Contrairement à cela, la méthode Math.hypot () empêche le dépassement intermédiaire ou le dépassement inférieur:

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 package java.awt.geom.Point2D

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

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

Testons maintenant 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 disponible à l'adresse over sur GitHub.