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.