Beregn afstanden mellem to punkter i Java

1. Oversigt

I denne hurtige vejledning viser vi, hvordan man beregner afstanden mellem to punkter i Java.

2. Afstandens matematiske formel

Lad os sige, at vi har to punkter på et plan: det første punkt A har koordinaterne (x1, y1), og det andet punkt B har koordinaterne (x2, y2). Vi vil beregne AB, afstanden mellem punkterne.

Lad os først bygge en højre trekant med hypotenusen AB:

Ifølge Pythagoras sætning er summen af ​​firkanterne af længden af ​​trekantsbenene den samme som kvadratet for længden af ​​trekants hypotenus: AB2 = AC2 + CB2.

For det andet, lad os beregne AC og CB.

Naturligvis:

AC = y2 - y1

Tilsvarende:

BC = x2 - x1

Lad os erstatte delene af ligningen:

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

Endelig kan vi fra ovenstående ligning beregne afstanden mellem punkterne:

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

Lad os nu gå videre til implementeringsdelen.

3. Java-implementering

3.1. Brug af almindelig formel

Selvom java.lang.Math og java.awt.geom.Point2D pakker giver klare løsninger, lad os først implementere ovenstående formel som den er:

offentlig dobbelt beregneDistanceBetweenPoints (dobbelt x1, dobbelt y1, dobbelt x2, dobbelt y2) {returner Math.sqrt ((y2 - y1) * (y2 - y1) + (x2 - x1) * (x2 - x1)); }

Lad os tage trekanten med benene for at teste løsningen 3 og 4 (som vist på billedet ovenfor). Det er klart, at antallet 5 er egnet som værdien af ​​hypotenusen:

3 * 3 + 4 * 4 = 5 * 5

Lad os kontrollere løsningen:

@Test offentligt ugyldigt givenTwoPoints_whenCalculateDistanceByFormula_thenCorrect () {dobbelt x1 = 3; dobbelt y1 = 4; dobbelt x2 = 7; dobbelt y2 = 1; dobbeltafstand = service.calculateDistanceBetweenPoints (x1, y1, x2, y2); assertEquals (afstand, 5, 0,001); }

3.2. Ved brug af java.lang.Math Pakke

Hvis resultatet af multiplikation i calcutDistanceBetweenPoints () metoden er for stor, overløb kan forekomme. I modsætning til det, Math.hypot () metode forhindrer mellemliggende overløb eller underløb:

offentlig dobbelt beregneDistanceBetweenPointsWithHypot (dobbelt x1, dobbelt y1, dobbelt x2, dobbelt y2) {dobbelt ac = Math.abs (y2 - y1); dobbelt cb = Math.abs (x2 - x1); returner Math.hypot (ac, cb); }

Lad os tage de samme punkter som før og kontrollere, at afstanden er den samme:

@Test offentlig ugyldighed givenTwoPoints_whenCalculateDistanceWithHypot_thenCorrect () {dobbelt x1 = 3; dobbelt y1 = 4; dobbelt x2 = 7; dobbelt y2 = 1; dobbeltafstand = service.calculateDistanceBetweenPointsWithHypot (x1, y1, x2, y2); assertEquals (afstand, 5, 0,001); }

3.3. Ved brug af java.awt.geom.Point2D Pakke

Lad os endelig beregne afstanden med Point2D.distance () metode:

offentlig dobbelt beregneDistanceBetweenPointsWithPoint2D (dobbelt x1, dobbelt y1, dobbelt x2, dobbelt y2) {returpunkt2D.distance (x1, y1, x2, y2); }

Lad os nu teste metoden på samme måde:

@Test offentlig ugyldighed givenTwoPoints_whenCalculateDistanceWithPoint2D_thenCorrect () {dobbelt x1 = 3; dobbelt y1 = 4; dobbelt x2 = 7; dobbelt y2 = 1; dobbeltafstand = service.calculateDistanceBetweenPointsWithPoint2D (x1, y1, x2, y2); assertEquals (afstand, 5, 0,001); }

4. Konklusion

I denne vejledning har vi vist et par måder at beregne afstanden mellem to punkter i Java.

Som altid er koden, der er brugt i eksemplerne, tilgængelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found