자바에서 두 지점 사이의 거리 계산

1. 개요

이 빠른 자습서에서는 Java에서 두 지점 사이의 거리를 계산하는 방법을 보여줍니다.

2. 거리의 수학 공식

평면에 두 개의 점이 있다고 가정 해 봅시다. 첫 번째 점 A에는 좌표 (x1, y1)가 있고 두 번째 점 B에는 좌표 (x2, y2)가 있습니다. 점 사이의 거리 인 AB를 계산하려고합니다.

먼저 빗변 AB로 직각 삼각형을 만들어 보겠습니다.

피타고라스 정리에 따르면 삼각형 다리 길이 제곱의 합은 삼각형 빗변 길이 제곱과 같습니다 : AB2 = AC2 + CB2 .

둘째, AC와 CB를 계산해 봅시다.

명백하게:

AC = y2 - y1

비슷하게:

BC = x2 - x1

방정식의 일부를 대체 해 보겠습니다.

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

마지막으로 위의 방정식에서 점 사이의 거리를 계산할 수 있습니다.

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

이제 구현 부분으로 이동하겠습니다.

3. 자바 구현

3.1. 일반 공식 사용

java.lang.Mathjava.awt.geom.Point2D 패키지가 준비된 솔루션을 제공 하지만 먼저 위의 공식을있는 그대로 구현해 보겠습니다.

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

솔루션을 테스트하기 위해 다리 34 가있는 삼각형을 가져와 보겠습니다 (위 그림 참조). 빗변의 값으로 숫자 5 가 적합하다는 것은 분명합니다 .

3 * 3 + 4 * 4 = 5 * 5

해결책을 확인해 보겠습니다.

@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. java.lang.Math 패키지 사용

calculateDistanceBetweenPoints () 메서드 의 곱셈 결과 가 너무 크면 오버플로가 발생할 수 있습니다. 이와 달리 Math.hypot () 메서드는 중간 오버플로 또는 언더 플로를 방지합니다.

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

이전과 동일한 점을 취하고 거리가 동일한 지 확인합니다.

@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. java.awt.geom.Point2D 패키지 사용

마지막으로 Point2D.distance () 메서드로 거리를 계산해 보겠습니다 .

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

이제 동일한 방식으로 메서드를 테스트 해 보겠습니다.

@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. 결론

이 튜토리얼에서는 Java에서 두 지점 사이의 거리를 계산하는 몇 가지 방법을 보여주었습니다.

항상 그렇듯이 예제에 사용 된 코드는 GitHub에서 사용할 수 있습니다.