Pronađite presjek dviju linija u Javi

1. Pregled

U ovom ćemo brzom uputstvu pokazati kako pronaći točku presjeka dviju linija definiranih linearnim funkcijama u obliku presjeka kosine.

2. Matematička formula presijecanja

Bilo koja ravna crta (osim okomite) na ravnini može se definirati linearnom funkcijom:

y = mx + b

gdje m je nagib i b je presjek y.

Za okomitu crtu, m bi bilo jednako beskonačnosti, zato ga i isključujemo. Ako su dvije crte paralelne, imaju isti nagib, to je jednaka vrijednost m.

Recimo da imamo dva retka. Prva funkcija definira prvi redak:

y = m1x + b1

A druga funkcija definira drugi redak:

y = m2x + b2

Želimo pronaći točku presjeka ovih linija. Očito je da jednadžba vrijedi za točku presjeka:

y1 = y2

Zamijenimo y-varijable:

m1x + b1 = m2x + b2

Iz gornje jednadžbe možemo pronaći x-Koordinirati:

x (m1 - m2) = b2 - b1 x = (b2 - b1) / (m1 - m2)

Konačno, možemo pronaći y-koordinatu točke presijecanja:

y = m1x + b1

Krenimo sada na provedbeni dio.

3. Implementacija Jave

Prvo, imamo četiri ulazne varijable - m1, b1 za prvi redak i m2, b2 za drugi redak.

Drugo, izračunatu točku presjeka pretvorit ćemo u objekt java.awt.Point tip.

Konačno, crte mogu biti paralelne, stoga napravimo vraćenu vrijednost Neobvezno:

javno Neobavezno izračunajIntersectionPoint (dvostruko m1, dvostruko b1, dvostruko m2, dvostruko b2) {if (m1 == m2) {return Izborno.empty (); } dvostruki x = (b2 - b1) / (m1 - m2); dvostruki y = m1 * x + b1; Točka točka = nova točka (); point.setLocation (x, y); return Neobvezno.of (point); }

Odaberite sada neke vrijednosti i testirajmo metodu za paralelne i neparalelne linije.

Na primjer, uzmimo x-os (y = 0) kao prvi redak, a redak definiran s y = x - 1 kao drugi redak.

Za drugu liniju, nagib m jednako je 1 što znači 45 stupnjeva i g-prekid je jednak -1 što znači da linija presijeca g-os u točki (0, -1).

Intuitivno je jasno da je točka presjeka druge crte s x-os mora biti (1,0):

Provjerimo.

Prvo, pobrinimo se da a Točka je prisutan, jer crte nisu paralelne, a zatim provjerite vrijednosti x i g:

@Test javna praznina givenNotParallelLines_whenCalculatePoint_thenPresent () {double m1 = 0; dvostruki b1 = 0; dvostruki m2 = 1; dvostruki b2 = -1; Neobvezna točka = service.calculateIntersectionPoint (m1, b1, m2, b2); assertTrue (point.isPresent ()); assertEquals (point.get (). getX (), 1, 0,001); assertEquals (point.get (). getY (), 0, 0,001); }

Na kraju, uzmimo dvije paralelne crte i provjerimo je li vraćena vrijednost prazna:

@Test javna praznina givenParallelLines_whenCalculatePoint_thenEmpty () {double m1 = 1; dvostruki b1 = 0; dvostruki m2 = 1; dvostruki b2 = -1; Neobvezna točka = service.calculateIntersectionPoint (m1, b1, m2, b2); assertFalse (point.isPresent ()); }

4. Zaključak

U ovom uputstvu pokazali smo kako izračunati točku presjeka dviju linija.

Kao i obično, cjeloviti izvorni kod dostupan je na GitHubu.


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