Beregn avstanden mellom to punkter i Java
1. Oversikt
I denne raske opplæringen viser vi hvordan du beregner avstanden mellom to punkter i Java.
2. Avstandens matematikkformel
La oss si at vi har to punkter på et plan: det første punktet A har koordinatene (x1, y1), og det andre punktet B har koordinatene (x2, y2). Vi ønsker å beregne AB, avstanden mellom punktene.
For det første, la oss bygge en riktig trekant med hypotenuse AB:
I følge Pythagoras teorem er summen av kvadratene av lengden på trekantens ben den samme som kvadratet av lengden på trekantenes hypotenus: AB2 = AC2 + CB2.
For det andre, la oss beregne AC og CB.
Åpenbart:
AC = y2 - y1
På samme måte:
BC = x2 - x1
La oss erstatte delene av ligningen:
avstand * avstand = (y2 - y1) * (y2 - y1) + (x2 - x1) * (x2 - x1)
Til slutt, fra ovenstående ligning, kan vi beregne avstanden mellom punktene:
avstand = sqrt ((y2 - y1) * (y2 - y1) + (x2 - x1) * (x2 - x1))
La oss nå gå videre til implementeringsdelen.
3. Java-implementering
3.1. Bruke vanlig formel
Selv om java.lang.Math og java.awt.geom.Point2D pakker gir klare løsninger, la oss først implementere formelen ovenfor som den er:
offentlig dobbel beregneDistanceBetweenPoints (dobbel x1, dobbel y1, dobbel x2, dobbel y2) {retur Math.sqrt ((y2 - y1) * (y2 - y1) + (x2 - x1) * (x2 - x1)); }
For å teste løsningen, la oss ta trekanten med bena 3 og 4 (som vist på bildet ovenfor). Det er klart at tallet 5 er egnet som verdien av hypotenusen:
3 * 3 + 4 * 4 = 5 * 5
La oss sjekke løsningen:
@Test public void givenTwoPoints_whenCalculateDistanceByFormula_thenCorrect () {double x1 = 3; dobbelt y1 = 4; dobbel x2 = 7; dobbelt y2 = 1; dobbel avstand = service.calculateDistanceBetweenPoints (x1, y1, x2, y2); assertEquals (avstand, 5, 0,001); }
3.2. Ved hjelp av java.lang.Math Pakke
Hvis resultatet av multiplikasjon i CalcDistanceBetweenPoints () metoden er for stor, kan overløp oppstå. I motsetning til det, Math.hypot () metoden forhindrer mellomflyt eller understrøm:
offentlig dobbeltberegningDistanseBetweenPointsWithHypot (dobbel x1, dobbel y1, dobbel x2, dobbel y2) {dobbel ac = Math.abs (y2 - y1); dobbel cb = Math.abs (x2 - x1); returner Math.hypot (ac, cb); }
La oss ta de samme punktene som før og sjekke at avstanden er den samme:
@Test offentlig ugyldighet gittTwoPoints_whenCalculateDistanceWithHypot_thenCorrect () {dobbel x1 = 3; dobbelt y1 = 4; dobbel x2 = 7; dobbelt y2 = 1; dobbel avstand = service.calculateDistanceBetweenPointsWithHypot (x1, y1, x2, y2); assertEquals (avstand, 5, 0,001); }
3.3. Ved hjelp av java.awt.geom.Point2D Pakke
Til slutt, la oss beregne avstanden med Punkt2D. Avstand () metode:
offentlig dobbeltberegningsavstandBetweenPointsWithPoint2D (dobbelt x1, dobbelt y1, dobbelt x2, dobbelt y2) {returpunkt2D. avstand (x1, y1, x2, y2); }
La oss nå teste metoden på samme måte:
@Test offentlig ugyldighet gittTwoPoints_whenCalculateDistanceWithPoint2D_thenCorrect () {doble x1 = 3; dobbelt y1 = 4; dobbel x2 = 7; dobbelt y2 = 1; dobbel avstand = service.calculateDistanceBetweenPointsWithPoint2D (x1, y1, x2, y2); assertEquals (avstand, 5, 0,001); }
4. Konklusjon
I denne opplæringen har vi vist noen måter å beregne avstanden mellom to punkter i Java.
Som alltid er koden som er brukt i eksemplene tilgjengelig på GitHub.