Számítsa ki a Java két pontja közötti távolságot

1. Áttekintés

Ebben a gyors bemutatóban megmutatjuk, hogyan lehet kiszámítani a Java két pontja közötti távolságot.

2. A távolság matematikai képlete

Tegyük fel, hogy két pontunk van egy síkon: az első A pont koordinátái (x1, y1), a második B pont koordinátái (x2, y2). Ki akarjuk számolni az AB-t, a pontok közötti távolságot.

Először építsünk egy derékszögű háromszöget az AB hipotenusz segítségével:

A Pitagorasz-tétel szerint a háromszög lába hosszának négyzetének összege megegyezik a háromszög hipotenuszának hosszának négyzetével: AB2 = AC2 + CB2.

Másodszor számítsuk ki az AC és a CB értékeket.

Nyilvánvalóan:

AC = y2 - y1

Hasonlóképpen:

BC = x2 - x1

Helyettesítsük az egyenlet részeit:

távolság * távolság = (y2 - y1) * (y2 - y1) + (x2 - x1) * (x2 - x1)

Végül a fenti egyenletből kiszámíthatjuk a pontok közötti távolságot:

távolság = sqrt ((y2 - y1) * (y2 - y1) + (x2 - x1) * (x2 - x1))

Most térjünk át a megvalósításra.

3. Java implementáció

3.1. Sima képlet használata

Habár java.lang.Math és java.awt.geom.Point2D A csomagok kész megoldásokat kínálnak, először is valósítsuk meg a fenti képletet:

nyilvános kettős kiszámításDistanceBetweenPoints (double x1, double y1, double x2, double y2) {return Math.sqrt ((y2 - y1) * (y2 - y1) + (x2 - x1) * (x2 - x1)); }

A megoldás teszteléséhez vegyük a háromszöget lábakkal 3 és 4 (a fenti képen látható módon). Egyértelmű, hogy a szám 5 alkalmas a hipotenusz értékeként:

3 * 3 + 4 * 4 = 5 * 5

Ellenőrizzük a megoldást:

@Test public void givenTwoPoints_whenCalculateDistanceByFormula_thenCorrect () {double x1 = 3; kettős y1 = 4; dupla x2 = 7; kettős y2 = 1; kettős távolság = service.calculateDistanceBetweenPoints (x1, y1, x2, y2); assertEquals (távolság, 5, 0,001); }

3.2. Használata java.lang.Math Csomag

Ha a szorzás eredménye a calcDistanceBetweenPoints () a módszer túl nagy, túlcsordulás léphet fel. Ettől eltérően Math.hypot () A módszer megakadályozza a köztes túlcsordulást

nyilvános kettős kiszámításDistanceBetweenPointsWithHypot (dupla x1, dupla y1, dupla x2, dupla y2) {double ac = Math.abs (y2 - y1); kettős cb = Math.abs (x2 - x1); return Math.hypot (ac, cb); }

Vegyük ugyanazokat a pontokat, mint korábban, és ellenőrizzük, hogy a távolság azonos-e:

@Test public void givenTwoPoints_whenCalculateDistanceWithHypot_thenCorrect () {double x1 = 3; kettős y1 = 4; dupla x2 = 7; kettős y2 = 1; kettős távolság = service.calculateDistanceBetweenPointsWithHypot (x1, y1, x2, y2); assertEquals (távolság, 5, 0,001); }

3.3. Használata java.awt.geom.Point2D Csomag

Végül számítsuk ki a távolságot a Point2D.távolság () módszer:

nyilvános kettős kiszámításDistanceBetweenPointsWithPoint2D (double x1, double y1, double x2, double y2) {return Point2D.távolság (x1, y1, x2, y2); }

Most teszteljük a módszert ugyanúgy:

@Test public void givenTwoPoints_whenCalculateDistanceWithPoint2D_thenCorrect () {double x1 = 3; kettős y1 = 4; dupla x2 = 7; kettős y2 = 1; kettős távolság = service.calculateDistanceBetweenPointsWithPoint2D (x1, y1, x2, y2); assertEquals (távolság, 5, 0,001); }

4. Következtetés

Ebben az oktatóanyagban bemutattunk néhány módszert a Java két pontja közötti távolság kiszámítására.

Mint mindig, a példákban használt kód elérhető a GitHubon.