1. Información general
En este tutorial rápido, mostraremos cómo encontrar el punto de intersección de dos líneas definidas por las funciones lineales en la forma pendiente-intersección.
2. La fórmula matemática de la intersección
Cualquier línea recta (excepto la vertical) en un plano se puede definir mediante la función lineal:
y = mx + b
donde m es la pendiente y b es la intersección con el eje y.
Para una línea vertical, m sería igual a infinito, por eso lo excluimos. Si dos rectas son paralelas, tienen la misma pendiente, que es el mismo valor de m .
Digamos que tenemos dos líneas. La primera función define la primera línea:
y = m1x + b1
Y la segunda función define la segunda línea:
y = m2x + b2
Queremos encontrar el punto de intersección de estas líneas. Obviamente, la ecuación es cierta para el punto de intersección:
y1 = y2
Sustituyamos las variables y- :
m1x + b1 = m2x + b2
De la ecuación anterior podemos encontrar la coordenada x :
x(m1 - m2) = b2 - b1 x = (b2 - b1) / (m1 - m2)
Finalmente, podemos encontrar la coordenada y del punto de intersección:
y = m1x + b1
Pasemos ahora a la parte de implementación.
3. Implementación de Java
En primer lugar, tenemos cuatro variables de entrada: m1, b1 para la primera línea y m2, b2 para la segunda línea.
En segundo lugar, convertiremos el punto de intersección calculado en el objeto de tipo java.awt.Point .
Finalmente, las líneas pueden ser paralelas, por lo tanto, hagamos que el valor devuelto sea Opcional :
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); }
Ahora escojamos algunos valores y probemos el método para líneas paralelas y no paralelas.
Por ejemplo, tomemos el eje x ( y = 0 ) como la primera línea y la línea definida por y = x - 1 como la segunda línea.
Para la segunda línea, la pendiente m es igual a 1, lo que significa 45 grados, y la intersección en y es igual a -1, lo que significa que la línea intercepta el eje y en el punto (0, -1).
Es intuitivamente claro que el punto de intersección de la segunda línea con el eje x debe ser (1,0 ):

Vamos a comprobarlo.
En primer lugar, vamos a asegurarnos de que un punto está presente, ya que las líneas no son paralelas, y luego comprobar los valores de x e 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); }
Por último, tomemos dos líneas paralelas y asegurémonos de que el valor devuelto esté vacío:

@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. Conclusión
En este tutorial, mostramos cómo calcular el punto de intersección de dos líneas.
Como de costumbre, el código fuente completo está disponible en GitHub.