Calcular la distancia entre dos puntos en Java

1. Información general

En este tutorial rápido, mostraremos cómo calcular la distancia entre dos puntos en Java.

2. La fórmula matemática de la distancia

Digamos que tenemos dos puntos en un plano: el primer punto A tiene las coordenadas (x1, y1) y el segundo punto B tiene las coordenadas (x2, y2). Queremos calcular AB, la distancia entre los puntos.

En primer lugar, construyamos un triángulo rectángulo con la hipotenusa AB:

Según el teorema de Pitágoras, la suma de los cuadrados de las longitudes de los catetos del triángulo es igual que el cuadrado de la longitud de la hipotenusa del triángulo: AB2 = AC2 + CB2 .

En segundo lugar, calculemos AC y CB.

Obviamente:

AC = y2 - y1

Similar:

BC = x2 - x1

Sustituyamos las partes de la ecuación:

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

Finalmente, a partir de la ecuación anterior podemos calcular la distancia entre los puntos:

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

Ahora pasemos a la parte de implementación.

3. Implementación de Java

3.1. Usando fórmula simple

Aunque los paquetes java.lang.Math y java.awt.geom.Point2D proporcionan soluciones listas, primero implementemos la fórmula anterior como está:

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

Para probar la solución, tomemos el triángulo de catetos 3 y 4 (como se muestra en la imagen de arriba). Está claro que el número 5 es adecuado como valor de la hipotenusa:

3 * 3 + 4 * 4 = 5 * 5

Comprobemos la solución:

@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. Usando el paquete java.lang.Math

Si el resultado de la multiplicación en el método calculateDistanceBetweenPoints () es demasiado grande, se puede producir un desbordamiento. A diferencia de eso, el método Math.hypot () evita el desbordamiento o subdesbordamiento intermedio:

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

Tomemos los mismos puntos que antes y comprobemos que la distancia es la misma:

@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. Usando el paquete java.awt.geom.Point2D

Finalmente, calculemos la distancia con el método Point2D.distance () :

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

Ahora probemos el método de la misma manera:

@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. Conclusión

En este tutorial, mostramos algunas formas de calcular la distancia entre dos puntos en Java.

Como siempre, el código utilizado en los ejemplos está disponible en GitHub.