Keresse meg a Java két metszéspontját

1. Áttekintés

Ebben a gyors bemutatóban megmutatjuk hogyan lehet megtalálni a lineáris függvények által meghatározott két egyenes metszéspontját lejtés-elfogó alakban.

2. A metszés matematikai képlete

Bármelyik egyenes (a függőleges kivételével) a síkon a lineáris függvénnyel határozható meg:

y = mx + b

hol m a lejtő és b az y-metszéspont.

Függőleges vonal esetén m egyenlő lenne a végtelennel, ezért kizárjuk. Ha két egyenes párhuzamos, akkor azoknak ugyanaz a lejtése, vagyis ugyanaz az értéke m.

Tegyük fel, hogy két vonalunk van. Az első függvény meghatározza az első sort:

y = m1x + b1

És a második függvény meghatározza a második sort:

y = m2x + b2

Meg akarjuk találni e vonalak metszéspontját. Nyilvánvaló, hogy az egyenlet igaz a metszéspontra:

y1 = y2

Helyettesítsük y-változók:

m1x + b1 = m2x + b2

A fenti egyenletből megtalálhatjuk a x-koordináta:

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

Végül megtalálhatjuk a metszéspont y koordinátáját:

y = m1x + b1

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

3. Java implementáció

Először négy bemeneti változónk van - m1, b1 az első sorhoz, és m2, b2 a második vonalhoz.

Másodszor a kiszámított metszéspontot átalakítjuk a java.awt.Point típus.

Végül a vonalak párhuzamosak lehetnek, ezért készítsük el a visszaadott értéket Választható:

public Opcionális calcIntersectionPoint (dupla m1, dupla b1, dupla m2, dupla b2) {if (m1 == m2) {return Opcionális.empty (); } kettős x = (b2 - b1) / (m1 - m2); kettős y = m1 * x + b1; Pontpont = új Pont (); point.setLocation (x, y); return Opcionális.of (pont); }

Most válasszunk néhány értéket, és teszteljük a módszert párhuzamos és nem párhuzamos vonalakra.

Vegyük például a x-tengely (y = 0), és az által meghatározott vonal y = x - 1 mint a második vonal.

A második vonalnál a lejtő m egyenlő 1 ami azt jelenti 45 fok, és a y-fogalma egyenlő -1 ami azt jelenti, hogy a vonal elfogja a y-tengelye a (0, -1) pontban.

Intuitív módon világos, hogy a második vonal metszéspontja a x-tengelynek kell lennie (1,0):

Ellenőrizzük.

Először ellenőrizzük, hogy a Pont jelen van, mivel a vonalak nem párhuzamosak, majd ellenőrizze a x és y:

@Test public void givenNotParallelLines_whenCalculatePoint_thenPresent () {double m1 = 0; kettős b1 = 0; dupla m2 = 1; kettős b2 = -1; Választható pont = service.calculateIntersectionPoint (m1, b1, m2, b2); assertTrue (point.isPresent ()); assertEquals (point.get (). getX (), 1, 0,001); assertEquals (point.get (). getY (), 0, 0,001); }

Végül vegyünk két párhuzamos vonalat, és győződjünk meg arról, hogy a visszaadott érték üres:

@Test public void givenParallelLines_whenCalculatePoint_thenEmpty () {double m1 = 1; kettős b1 = 0; dupla m2 = 1; kettős b2 = -1; Választható pont = service.calculateIntersectionPoint (m1, b1, m2, b2); assertFalse (point.isPresent ()); }

4. Következtetés

Ebben az oktatóanyagban bemutattuk, hogyan lehet kiszámítani két vonal metszéspontját.

Szokás szerint a teljes forráskód elérhető a GitHubon.


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