Izračunajte udaljenost između dvije točke u Javi

1. Pregled

U ovom brzom vodiču pokazat ćemo kako izračunati udaljenost između dvije točke u Javi.

2. Matematička formula udaljenosti

Recimo da imamo dvije točke na ravnini: prva točka A ima koordinate (x1, y1), a druga točka B ima koordinate (x2, y2). Želimo izračunati AB, udaljenost između točaka.

Prvo, izgradimo pravokutni trokut s hipotenuzom AB:

Prema Pitagorinom teoremu, zbroj kvadrata duljina kateta trokuta jednak je kvadratu duljine hipotenuze trokuta: AB2 = AC2 + CB2.

Drugo, izračunajmo AC i CB.

Očito:

AC = y2 - y1

Slično:

BC = x2 - x1

Zamijenimo dijelove jednadžbe:

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

Konačno, iz gornje jednadžbe možemo izračunati udaljenost između točaka:

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

Sada prijeđimo na dio implementacije.

3. Implementacija Jave

3.1. Korištenje obične formule

Iako java.lang.Math i java.awt.geom.Point2D paketi nude gotova rješenja, najprije primijenimo gornju formulu kakva jest:

javni dvostruki izračunDistanBetweenPoints (double x1, double y1, double x2, double y2) {return Math.sqrt ((y2 - y1) * (y2 - y1) + (x2 - x1) * (x2 - x1)); }

Da bismo testirali rješenje, uzmimo trokut s nogama 3 i 4 (kao što je prikazano na gornjoj slici). Jasno je da broj 5 je prikladna kao vrijednost hipotenuze:

3 * 3 + 4 * 4 = 5 * 5

Provjerimo rješenje:

@Test javna praznina givenTwoPoints_whenCalculateDistanceByFormula_thenCorrect () {double x1 = 3; dvostruki y1 = 4; dvostruki x2 = 7; dvostruki y2 = 1; dvostruka udaljenost = service.calculateDistanceBetweenPoints (x1, y1, x2, y2); assertEquals (udaljenost, 5, 0,001); }

3.2. Koristeći java.lang.Math Paket

Ako je rezultat množenja u izračunajRazmak između točaka () metoda je prevelika, može doći do prelijevanja. Za razliku od toga, Math.hypot () metoda sprječava srednje preljevanje ili podlijevanje:

javni dvostruki izračunDistanBetweenPointsWithHypot (dvostruki x1, dvostruki y1, dvostruki x2, dvostruki y2) {dvostruki ac = Math.abs (y2 - y1); dvostruki cb = Math.abs (x2 - x1); return Math.hypot (ac, cb); }

Uzmimo iste bodove kao i prije i provjerimo je li udaljenost jednaka:

@Test javna praznina givenTwoPoints_whenCalculateDistanceWithHypot_thenCorrect () {double x1 = 3; dvostruki y1 = 4; dvostruki x2 = 7; dvostruki y2 = 1; dvostruka udaljenost = service.calculateDistanceBetweenPointsWithHypot (x1, y1, x2, y2); assertEquals (udaljenost, 5, 0,001); }

3.3. Koristeći java.awt.geom.Point2D Paket

Napokon, izračunajmo udaljenost s Point2D.distanca () metoda:

javni dvostruki izračunDistanBetweenPointsWithPoint2D (dvostruki x1, dvostruki y1, dvostruki x2, dvostruki y2) {povratak Point2D.distance (x1, y1, x2, y2); }

Ajmo sada testirati metodu na isti način:

@Test javna praznina givenTwoPoints_whenCalculateDistanceWithPoint2D_thenCorrect () {double x1 = 3; dvostruki y1 = 4; dvostruki x2 = 7; dvostruki y2 = 1; dvostruka udaljenost = service.calculateDistanceBetweenPointsWithPoint2D (x1, y1, x2, y2); assertEquals (udaljenost, 5, 0,001); }

4. Zaključak

U ovom smo uputstvu pokazali nekoliko načina za izračunavanje udaljenosti između dviju točaka u Javi.

Kao i uvijek, kod korišten u primjerima dostupan je na GitHub-u.