Tengo 2 líneas. Ambas líneas contienen sus 2 puntos de X e Y. Esto significa que ambos tienen longitud.Algoritmo para la intersección de 2 líneas?
Veo 2 fórmulas, una que usa determinantes y otra usa álgebra normal. ¿Cuál sería el más eficiente para calcular y cómo se ve la fórmula?
Me está costando usar matrices en el código.
Esto es lo que tengo hasta ahora, ¿puede ser más eficiente?
public static Vector3 Intersect(Vector3 line1V1, Vector3 line1V2, Vector3 line2V1, Vector3 line2V2)
{
//Line1
float A1 = line1V2.Y - line1V1.Y;
float B1 = line1V2.X - line1V1.X;
float C1 = A1*line1V1.X + B1*line1V1.Y;
//Line2
float A2 = line2V2.Y - line2V1.Y;
float B2 = line2V2.X - line2V1.X;
float C2 = A2 * line2V1.X + B2 * line2V1.Y;
float det = A1*B2 - A2*B1;
if (det == 0)
{
return null;//parallel lines
}
else
{
float x = (B2*C1 - B1*C2)/det;
float y = (A1 * C2 - A2 * C1)/det;
return new Vector3(x,y,0);
}
}
¿Qué le parece escribir las fórmulas, solo matemáticas, sin código, y luego nos muestra el código que tiene, y luego nos dice dónde está teniendo problemas? – atk
Tiene un algoritmo O (1), por lo que no estoy seguro de que realmente esté buscando la eficiencia. Si realmente lo es, ¿ha perfilado su código para descubrir qué bits son menos eficientes que otros? ¿Ha verificado otras partes de su programa para ver qué es ineficiente y cómo define la eficiencia, él (tamaño en memoria, velocidad, etc.)? O, como hablas de matrículas, ¿realmente estás pidiendo una solución genérica, con una línea en número arbitrario de dimensiones? – atk
Dice "líneas" pero dice que tienen longitud. ¿Te refieres a líneas o segmentos de línea? El caso de línea es mucho más fácil porque dos líneas no paralelas en un plano x, y se cruzan _en algún lugar_, no así con los segmentos – user316117