Beräkna avståndet mellan två punkter i Java

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.