Nájdite križovatku dvoch línií v Jave

1. Prehľad

V tomto rýchlom návode si ukážeme ako nájsť priesečník dvoch priamok definovaných lineárnymi funkciami vo forme sklonu-zachytenia.

2. Matematický vzorec križovatky

Akákoľvek priamka (okrem zvislej) v rovine môže byť definovaná lineárnou funkciou:

y = mx + b

kde m je sklon a b je y-prechod.

Pre zvislú čiaru m by sa rovnal nekonečnu, preto ho vylučujeme. Ak sú dve priamky rovnobežné, majú rovnaký sklon, to je rovnaká hodnota m.

Povedzme, že máme dva riadky. Prvá funkcia definuje prvý riadok:

y = m1x + b1

A druhá funkcia definuje druhý riadok:

y = m2x + b2

Chceme nájsť priesečník týchto priamok. Je zrejmé, že rovnica platí pre priesečník:

y1 = y2

Nahraďme y-premenné:

m1x + b1 = m2x + b2

Z vyššie uvedenej rovnice môžeme nájsť X-súradnica:

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

Nakoniec nájdeme súradnicu y priesečníka:

y = m1x + b1

Prejdime teraz k implementačnej časti.

3. Implementácia Java

Po prvé, máme štyri vstupné premenné - ml, b1 pre prvý riadok a m2, b2 pre druhý riadok.

Po druhé, prevedieme vypočítaný priesečník na objekt java.awt.Point typu.

Napokon môžu byť riadky rovnobežné, preto urobme vrátenú hodnotu Voliteľné:

verejné Voliteľné vypočítaťIntersectionPoint (dvojité m1, dvojité b1, dvojité m2, dvojité b2) {if (m1 == m2) {návrat Optional.empty (); } dvojité x = (b2 - b1) / (m1 - m2); dvojité y = m1 * x + b1; Bodový bod = nový Bod (); point.setLocation (x, y); návrat Optional.of (bod); }

Teraz poďme zvoliť niektoré hodnoty a otestovať metódu pre paralelné a neparalelné čiary.

Zoberme si napríklad X- os (y = 0) ako prvý riadok a riadok definovaný y = x - 1 ako druhý riadok.

Pre druhú líniu sklon m rovná sa 1 čo znamená 45 stupňov a r-intercept sa rovná -1 čo znamená, že čiara zachytáva r-osa v bode (0, -1).

Je intuitívne jasné, že priesečník druhej čiary s X-osa musí byť (1,0):

Poďme to skontrolovať.

Najskôr sa uistite, že a Bod je prítomné, pretože čiary nie sú rovnobežné, a potom skontrolujte hodnoty X a r:

@Test public void givenNotParallelLines_whenCalculatePoint_thenPresent () {double m1 = 0; dvojnásobok bl = 0; dvojitý m2 = 1; dvojnásobok b2 = -1; Voliteľný bod = service.calculateIntersectionPoint (m1, b1, m2, b2); assertTrue (point.isPresent ()); assertEquals (point.get (). getX (), 1, 0,001); assertEquals (point.get (). getY (), 0, 0,001); }

Na záver vezmime dve rovnobežné čiary a uistite sa, že je vrátená hodnota prázdna:

@Test public void givenParallelLines_whenCalculatePoint_thenEmpty () {double m1 = 1; dvojnásobok bl = 0; dvojitý m2 = 1; dvojnásobok b2 = -1; Voliteľný bod = service.calculateIntersectionPoint (m1, b1, m2, b2); assertFalse (point.isPresent ()); }

4. Záver

V tomto tutoriáli sme si ukázali, ako vypočítať priesečník dvoch priamok.

Celý zdrojový kód je ako obvykle k dispozícii na serveri GitHub.


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