Изчислете разстоянието между две точки в Java

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. Внедряване на Java

3.1. Използване на обикновена формула

Въпреки че пакетите java.lang.Math и java.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)); }

За да тестваме решението, нека вземем триъгълника с крака 3 и 4 (както е показано на снимката по-горе). Ясно е, че числото 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 Package

Ако резултатът от умножението в метода calcuDistanceBetweenPoints () е твърде голям, може да възникне препълване. За разлика от това, методът 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.