Calcular a distância entre dois pontos em Java
1. Visão geral
Neste tutorial rápido, mostraremos como calcular a distância entre dois pontos em Java.
2. A fórmula matemática da distância
Digamos que temos dois pontos em um plano: o primeiro ponto A tem as coordenadas (x1, y1) e o segundo ponto B tem as coordenadas (x2, y2). Queremos calcular AB, a distância entre os pontos.
Em primeiro lugar, vamos construir um triângulo retângulo com a hipotenusa AB:
De acordo com o teorema de Pitágoras, a soma dos quadrados dos comprimentos das pernas do triângulo é igual ao quadrado do comprimento da hipotenusa do triângulo:AB2 = AC2 + CB2.
Em segundo lugar, vamos calcular AC e CB.
Obviamente:
AC = y2 - y1
Similarmente:
BC = x2 - x1
Vamos substituir as partes da equação:
distance * distance = (y2 - y1) * (y2 - y1) + (x2 - x1) * (x2 - x1)
Finalmente, a partir da equação acima, podemos calcular a distância entre os pontos:
distance = sqrt((y2 - y1) * (y2 - y1) + (x2 - x1) * (x2 - x1))
Agora vamos passar para a parte de implementação.
3. Implementação Java
3.1. Usando Fórmula Simples
Embora java.lang.Mathejava.awt.geom.Point2D packages forneçam soluções prontas, vamos primeiro implementar a fórmula acima como é:
public double calculateDistanceBetweenPoints(
double x1,
double y1,
double x2,
double y2) {
return Math.sqrt((y2 - y1) * (y2 - y1) + (x2 - x1) * (x2 - x1));
}
Para testar a solução, vamos pegar o triângulo com pernas3e4 (como mostrado na imagem acima). É claro que o número5 é adequado como o valor da hipotenusa:
3 * 3 + 4 * 4 = 5 * 5
Vamos verificar a solução:
@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 o pacotejava.lang.Math
Se o resultado da multiplicação no métodocalculateDistanceBetweenPoints() for muito grande, pode ocorrer estouro. Ao contrário disso, o métodoMath.hypot() evita estouro intermediário ou underflow:
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);
}
Vamos pegar os mesmos pontos de antes e verificar se a distância é a mesma:
@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 o pacotejava.awt.geom.Point2D
Finalmente, vamos calcular a distância com o métodoPoint2D.distance():
public double calculateDistanceBetweenPointsWithPoint2D(
double x1,
double y1,
double x2,
double y2) {
return Point2D.distance(x1, y1, x2, y2);
}
Agora vamos testar o método da mesma maneira:
@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. Conclusão
Neste tutorial, mostramos algumas maneiras de calcular a distância entre dois pontos em Java.
Como sempre, o código usado nos exemplos está disponívelover on GitHub.