Vypočítajte vzdialenosť medzi dvoma bodmi v Jave
1. Prehľad
V tomto rýchlom výučbe si ukážeme, ako vypočítať vzdialenosť medzi dvoma bodmi v Jave.
2. Matematický vzorec vzdialenosti
Povedzme, že máme dva body v rovine: prvý bod A má súradnice (x1, y1) a druhý bod B má súradnice (x2, y2). Chceme vypočítať AB, vzdialenosť medzi bodmi.
Najskôr vytvorme pravý trojuholník s preponou AB:
Podľa Pytagorovej vety je súčet druhých mocnín dĺžok nôh trojuholníka rovnaký ako štvorček dĺžky prepočítanej trojuholníka: AB2 = AC2 + CB2.
Po druhé, poďme vypočítať AC a CB.
Je zrejmé, že:
AC = y2 - y1
Podobne:
BC = x2 - x1
Nahraďme časti rovnice:
vzdialenosť * vzdialenosť = (y2 - y1) * (y2 - y1) + (x2 - x1) * (x2 - x1)
Nakoniec z vyššie uvedenej rovnice môžeme vypočítať vzdialenosť medzi bodmi:
vzdialenosť = štvorcový ((y2 - y1) * (y2 - y1) + (x2 - x1) * (x2 - x1))
Teraz prejdime k implementačnej časti.
3. Implementácia Java
3.1. Používanie obyčajného vzorca
Hoci java.lang.Math a java.awt.geom.Point2D balíčky poskytujú hotové riešenia, najskôr implementujeme vyššie uvedený vzorec ako je:
verejné zdvojnásobenie vypočítaťVzdialenosť medzi bodmi (dvojité x1, dvojité y1, dvojité x2, dvojité y2) {návrat Math.sqrt ((y2 - y1) * (y2 - y1) + (x2 - x1) * (x2 - x1)); }
Na vyskúšanie riešenia si vezmeme trojuholník s nohami 3 a 4 (ako je znázornené na obrázku vyššie). Je jasné, že počet 5 je vhodná ako hodnota prepočtu:
3 * 3 + 4 * 4 = 5 * 5
Poďme skontrolovať riešenie:
@Test public void givenTwoPoints_whenCalculateDistanceByFormula_thenCorrect () {double x1 = 3; dvojitý y1 = 4; dvojitý x2 = 7; dvojitý y2 = 1; dvojitá vzdialenosť = service.calculateDistanceB BetweenPoints (x1, y1, x2, y2); assertEquals (vzdialenosť, 5, 0,001); }
3.2. Použitím java.lang.Math Balíček
Ak je výsledkom násobenia v vypočítaťVzdialenosťBodyPoints () metóda je príliš veľká, môže dôjsť k pretečeniu. Na rozdiel od toho Math.hypot () metóda zabráni strednému pretečeniu alebo podtečeniu:
verejné zdvojnásobenie vypočítaťVzdialenosť medzi bodmiWithHypot (dvojité x1, dvojité y1, dvojité x2, dvojité y2) {dvojité ac = Math.abs (y2 - y1); double cb = Math.abs (x2 - x1); návrat Math.hypot (ac, cb); }
Zoberme rovnaké body ako predtým a skontrolujte, či je vzdialenosť rovnaká:
@Test public void givenTwoPoints_whenCalculateDistanceWithHypot_thenCorrect () {double x1 = 3; dvojitý y1 = 4; dvojitý x2 = 7; dvojitý y2 = 1; dvojitá vzdialenosť = service.calculateDistanceB BetweenPointsWithHypot (x1, y1, x2, y2); assertEquals (vzdialenosť, 5, 0,001); }
3.3. Použitím java.awt.geom.Point2D Balíček
Nakoniec vypočítajme vzdialenosť pomocou Point2D.distance () metóda:
verejné dvojité spočítaťVzdialenosťBodyPointsWithPoint2D (dvojité x1, dvojité y1, dvojité x2, dvojité y2) {návratové Point2D.distance (x1, y1, x2, y2); }
Teraz otestujme metódu rovnakým spôsobom:
@Test public void givenTwoPoints_whenCalculateDistanceWithPoint2D_thenCorrect () {double x1 = 3; dvojitý y1 = 4; dvojitý x2 = 7; dvojitý y2 = 1; dvojitá vzdialenosť = service.calculateDistanceB BetweenPointsWithPoint2D (x1, y1, x2, y2); assertEquals (vzdialenosť, 5, 0,001); }
4. Záver
V tomto tutoriáli sme si ukázali niekoľko spôsobov, ako vypočítať vzdialenosť medzi dvoma bodmi v Jave.
Ako vždy, kód použitý v príkladoch je k dispozícii na GitHub.