Find skæringspunktet mellem to linjer i Java

1. Oversigt

I denne hurtige vejledning viser vi det hvordan man finder skæringspunktet for to linjer defineret af de lineære funktioner i hældningsafskæringsformen.

2. Den matematiske formel for skæringspunktet

Enhver lige linje (undtagen lodret) på et plan kan defineres ved hjælp af den lineære funktion:

y = mx + b

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

For en lodret linje, m ville være lig med uendelig, derfor udelukker vi det. Hvis to linjer er parallelle, har de samme hældning, det er den samme værdi af m.

Lad os sige, at vi har to linjer. Den første funktion definerer den første linje:

y = m1x + b1

Og den anden funktion definerer anden linje:

y = m2x + b2

Vi ønsker at finde skæringspunktet mellem disse linjer. Ligningen gælder naturligvis for skæringspunktet:

y1 = y2

Lad os erstatte y-variabler:

m1x + b1 = m2x + b2

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

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

Endelig kan vi finde y-koordinaten til skæringspunktet:

y = m1x + b1

Lad os nu gå videre til implementeringsdelen.

3. Java-implementering

For det første har vi fire inputvariabler - m1, b1 for første linje, og m2, b2 til anden linje.

For det andet konverterer vi det beregnede skæringspunkt til objektet for java.awt.Point type.

Endelig kan linjer være parallelle, så lad os lave den returnerede værdi Valgfri:

offentlig Valgfri calcIntersectionPoint (dobbelt m1, dobbelt b1, dobbelt m2, dobbelt b2) {hvis (m1 == m2) {return Optional.empty (); } dobbelt x = (b2 - b1) / (m1 - m2); dobbelt y = m1 * x + b1; Punktpunkt = nyt punkt (); point.setLocation (x, y); return Valgfri. af (punkt); }

Lad os nu vælge nogle værdier og teste metoden for parallelle og ikke-parallelle linjer.

Lad os for eksempel tage x-akse (y = 0) som den første linje, og linjen defineret af y = x - 1 som anden linje.

For anden linje, skråningen m er lig med 1 hvilket betyder 45 grader og y-intercept er lig med -1 hvilket betyder, at linjen opfanger linjen y-aks i punktet (0, -1).

Det er intuitivt klart, at skæringspunktet mellem anden linje og x-axis skal være (1,0):

Lad os kontrollere det.

Lad os først sikre os, at en Punkt er til stede, da linjerne ikke er parallelle, og kontroller derefter værdierne for x og y:

@Test offentlig ugyldighed givenNotParallelLines_whenCalculatePoint_thenPresent () {dobbelt m1 = 0; dobbelt b1 = 0; dobbelt m2 = 1; dobbelt b2 = -1; Valgfri punkt = service.calculateIntersectionPoint (m1, b1, m2, b2); assertTrue (point.isPresent ()); assertEquals (point.get (). getX (), 1, 0.001); assertEquals (point.get (). getY (), 0, 0,001); }

Lad os endelig tage to parallelle linjer og sørge for, at den returnerede værdi er tom:

@Test offentligt ugyldigt givenParallelLines_whenCalculatePoint_thenEmpty () {dobbelt m1 = 1; dobbelt b1 = 0; dobbelt m2 = 1; dobbelt b2 = -1; Valgfri punkt = service.calculateIntersectionPoint (m1, b1, m2, b2); assertFalse (point.isPresent ()); }

4. Konklusion

I denne vejledning har vi vist, hvordan man beregner skæringspunktet for to linjer.

Som sædvanlig er den komplette kildekode tilgængelig på GitHub.


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