Finn krysset mellom to linjer i Java

1. Oversikt

I denne raske opplæringen viser vi hvordan finne skjæringspunktet mellom to linjer definert av de lineære funksjonene i skråningsavskjæringsformen.

2. Math Formula of Crossings

Enhver rett linje (unntatt vertikal) på et plan kan defineres av den lineære funksjonen:

y = mx + b

hvor m er skråningen og b er y-skjæringspunktet.

For en vertikal linje, m ville være lik uendelig, det er derfor vi ekskluderer det. Hvis to linjer er parallelle, har de samme skråningen, det er den samme verdien av m.

La oss si at vi har to linjer. Den første funksjonen definerer den første linjen:

y = m1x + b1

Og den andre funksjonen definerer den andre linjen:

y = m2x + b2

Vi ønsker å finne skjæringspunktet mellom disse linjene. Åpenbart er ligningen sant for skjæringspunktet:

y1 = y2

La oss erstatte y-variabler:

m1x + b1 = m2x + b2

Fra ovenstående ligning kan vi finne x-koordinere:

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

Til slutt kan vi finne y-koordinaten til skjæringspunktet:

y = m1x + b1

La oss nå gå videre til implementeringsdelen.

3. Java-implementering

For det første har vi fire inngangsvariabler - m1, b1 for første linje, og m2, b2 for andre linje.

For det andre konverterer vi det beregnede skjæringspunktet til objektet til java.awt.Point type.

Til slutt kan linjene være parallelle, derfor la oss lage den returnerte verdien Valgfri:

offentlig Valgfri beregningKrysspunkt (dobbelt m1, dobbelt b1, dobbelt m2, dobbelt b2) {hvis (m1 == m2) {retur Optional.empty (); } dobbel x = (b2 - b1) / (m1 - m2); dobbelt y = m1 * x + b1; Punktpunkt = nytt punkt (); point.setLocation (x, y); retur Valgfritt. av (punkt); }

La oss nå velge noen verdier og teste metoden for parallelle og ikke-parallelle linjer.

La oss for eksempel ta x-aksi (y = 0) som første linje, og linjen definert av y = x - 1 som andre linje.

For andre linje, skråningen m er lik 1 som betyr 45 grader, og y-avskjæring er lik -1 som betyr at linjen avlytter y-akse i punktet (0, -1).

Det er intuitivt klart at skjæringspunktet mellom den andre linjen og x-akse må være (1,0):

La oss sjekke det.

For det første, la oss sørge for at en Punkt er til stede, siden linjene ikke er parallelle, og kontroller deretter verdiene av x og y:

@Test public void givenNotParallelLines_whenCalculatePoint_thenPresent () {double m1 = 0; dobbelt b1 = 0; dobbelt m2 = 1; dobbelt b2 = -1; Valgfritt punkt = service.calculateIntersectionPoint (m1, b1, m2, b2); assertTrue (point.isPresent ()); assertEquals (point.get (). getX (), 1, 0.001); assertEquals (point.get (). getY (), 0, 0.001); }

Til slutt, la oss ta to parallelle linjer og sørge for at den returnerte verdien er tom:

@Test offentlig ugyldighet givenParallelLines_whenCalculatePoint_thenEmpty () {double m1 = 1; dobbelt b1 = 0; dobbelt m2 = 1; dobbelt b2 = -1; Valgfritt punkt = service.calculateIntersectionPoint (m1, b1, m2, b2); assertFalse (point.isPresent ()); }

4. Konklusjon

I denne opplæringen har vi vist hvordan man beregner skjæringspunktet mellom to linjer.

Som vanlig er den komplette kildekoden tilgjengelig på GitHub.


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