Sean A, B los dos puntos dados en la primera línea (L1) y C, D los dos puntos dados en la segunda línea (L2).
Analicemos primero el caso más simple:
- Suponga que L1 y L2 tienen exactamente un punto de intersección, P. (*)
- Primero tratemos con el caso 2D. (**)
Entonces, podrías representar a P usando formas paramétricas:
- P = A + t AB —- (1)
- P = C + s CD —- (2)
donde s y t son algunos escalares.
- Cómo determinar el número de pasos en el problema de Towers of Hanoi
- Cómo calcular rápidamente todos los enteros que se multiplican de manera uniforme para un número dado
- ¿Cuál es la forma más fácil de demostrar que el vértice v es un vértice cortado en un gráfico conectado G si y solo si existen 2 vértices x e y en G, de modo que cada camino entre x e y pase por v?
- ¿Cuál es una explicación intuitiva del algoritmo de ruta más corta de Dijkstra en un gráfico con pesos negativos?
- ¿Qué otras propiedades interesantes tendría una distribución de probabilidad cuya media es igual a su desviación estándar?
Igualando lo anterior, obtienes:
- CA + t AB = s CD
Aplicando el producto cruzado con AB en ambos lados, (porque AB × AB = 0 ) obtienes:
- CA × AB = s (CD × AB) —- (3)
Resolviendo s, y sustituyendo nuevamente en (2), obtendrá el punto de intersección P.
Implementación
Es bastante sencillo si tiene una biblioteca de geometría que admita todos estos operadores (a saber, suma, resta y producto cruzado de vectores).
Observaciones finales
(*): Los casos de borde (0 o infinitos puntos de intersección) ocurren cuando las dos líneas son paralelas, es decir, AB × CD = 0 .
(**): Suponiendo que L1 y L2 no son paralelos, para espacios de dimensiones superiores (p. Ej., 3D), dos líneas pueden no cruzarse entre sí en general. En cambio, después de calcular syt, obtendrá el par más cercano de las dos líneas.