Trouver l'intersection de deux lignes en Java

1. Vue d'ensemble

Dans ce didacticiel rapide, nous montrerons comment trouver le point d'intersection de deux lignes définies par les fonctions linéaires sous la forme d'interception de pente.

2. La formule mathématique de l'intersection

Toute ligne droite (sauf verticale) sur un plan peut être définie par la fonction linéaire:

y = mx + b

m est la pente et b est l'ordonnée à l'origine.

Pour une ligne verticale, m serait égal à l'infini, c'est pourquoi nous l'excluons. Si deux droites sont parallèles, elles ont la même pente, c'est-à-dire la même valeur de m .

Disons que nous avons deux lignes. La première fonction définit la première ligne:

y = m1x + b1

Et la deuxième fonction définit la deuxième ligne:

y = m2x + b2

Nous voulons trouver le point d'intersection de ces lignes. Évidemment, l'équation est vraie pour le point d'intersection:

y1 = y2

Substitution Let y- variables:

m1x + b1 = m2x + b2

À partir de l'équation ci-dessus, nous pouvons trouver la coordonnée x :

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

Enfin, nous pouvons trouver la coordonnée y du point d'intersection:

y = m1x + b1

Passons maintenant à la partie implémentation.

3. Implémentation Java

Premièrement, nous avons quatre variables d'entrée - m1, b1 pour la première ligne et m2, b2 pour la deuxième ligne.

Deuxièmement, nous allons convertir le point d'intersection calculé en objet de type java.awt.Point .

Enfin, les lignes peuvent être parallèles, donc rendons la valeur renvoyée facultative :

public Optional calculateIntersectionPoint( double m1, double b1, double m2, double b2) { if (m1 == m2) { return Optional.empty(); } double x = (b2 - b1) / (m1 - m2); double y = m1 * x + b1; Point point = new Point(); point.setLocation(x, y); return Optional.of(point); }

Maintenant, choisissons quelques valeurs et testons la méthode pour les lignes parallèles et non parallèles.

Par exemple, prenons l' axe x ( y = 0 ) comme première ligne et la ligne définie par y = x - 1 comme deuxième ligne.

Pour la deuxième ligne, la pente m est égale à 1, ce qui signifie 45 degrés, et l' interception y est égale à -1 ce qui signifie que la ligne intercepte l' axe y au point (0, -1).

Il est intuitivement clair que le point d'intersection de la deuxième ligne avec l' axe des x doit être (1,0 ):

Vérifions-le.

Tout d'abord, assurons-nous qu'un point est présent, car les lignes ne sont pas parallèles, puis vérifions les valeurs de x et y :

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

Enfin, prenons deux lignes parallèles et assurez-vous que la valeur retournée est vide:

@Test public void givenParallelLines_whenCalculatePoint_thenEmpty() { double m1 = 1; double b1 = 0; double m2 = 1; double b2 = -1; Optional point = service.calculateIntersectionPoint(m1, b1, m2, b2); assertFalse(point.isPresent()); }

4. Conclusion

Dans ce tutoriel, nous avons montré comment calculer le point d'intersection de deux lignes.

Comme d'habitude, le code source complet est disponible à l'adresse over sur GitHub.