1. Översikt
I den här snabbhandledningen visar vi hur man beräknar avståndet mellan två punkter i Java.
2. Avståndets matematiska formel
Låt oss säga att vi har två punkter på ett plan: den första punkten A har koordinaterna (x1, y1) och den andra punkten B har koordinaterna (x2, y2). Vi vill beräkna AB, avståndet mellan punkterna.
Låt oss först bygga en rätt triangel med hypotenus AB:

Enligt Pythagoras sats är summan av kvadraterna för längderna på triangelns ben samma som kvadraten för längden på triangelns hypotenus: AB2 = AC2 + CB2 .
För det andra, låt oss beräkna AC och CB.
Självklart:
AC = y2 - y1
Liknande:
BC = x2 - x1
Låt oss ersätta ekvationsdelarna:
distance * distance = (y2 - y1) * (y2 - y1) + (x2 - x1) * (x2 - x1)
Slutligen, från ovanstående ekvation kan vi beräkna avståndet mellan punkterna:
distance = sqrt((y2 - y1) * (y2 - y1) + (x2 - x1) * (x2 - x1))
Låt oss nu gå vidare till implementeringsdelen.
3. Java-implementering
3.1. Använda vanlig formel
Även om paketen java.lang.Math och java.awt.geom.Point2D ger färdiga lösningar, låt oss först implementera ovanstående formel som den är:
public double calculateDistanceBetweenPoints( double x1, double y1, double x2, double y2) { return Math.sqrt((y2 - y1) * (y2 - y1) + (x2 - x1) * (x2 - x1)); }
För att testa lösningen, låt oss ta triangeln med ben 3 och 4 (som visas på bilden ovan). Det är tydligt att siffran 5 är lämplig som hypotenusens värde:
3 * 3 + 4 * 4 = 5 * 5
Låt oss kolla lösningen:
@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. Använda java.lang.Math- paketet
Om resultatet av multiplikation i metoden calcDistanceBetweenPoints () är för stor kan överflöd uppstå. Till skillnad från det förhindrar metoden Math.hypot () mellanliggande överflöde eller underflöde:
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); }
Låt oss ta samma poäng som tidigare och kontrollera att avståndet är detsamma:
@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. Använda paketet java.awt.geom.Point2D
Slutligen, låt oss beräkna avståndet med metoden Point2D.distance () :
public double calculateDistanceBetweenPointsWithPoint2D( double x1, double y1, double x2, double y2) { return Point2D.distance(x1, y1, x2, y2); }
Låt oss nu testa metoden på samma sätt:
@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. Slutsats
I denna handledning har vi visat några sätt att beräkna avståndet mellan två punkter i Java.
Som alltid är koden som används i exemplen tillgänglig på GitHub.