Dados los 4 puntos que describen 2 segmentos de línea, ¿cómo calcula si la línea A está hacia o lejos de la línea B?
Las 2 líneas tienen una longitud fija y se pueden medir como distancia desde x1 / y1 hasta x2 / y2.
Dados los 4 puntos que describen 2 segmentos de línea, ¿cómo calcula si la línea A está hacia o lejos de la línea B?
Las 2 líneas tienen una longitud fija y se pueden medir como distancia desde x1 / y1 hasta x2 / y2.
Respuestas:
Dejar A
yB
sea dos puntos en la línea negra. Deja C
y D
ser tu segmento azul. El signo de la z
coordenada del producto cruzado AB^AC
le indica si C
está "a la izquierda" o "a la derecha" de la línea negra. Del mismo modo, el producto cruzado AB^CD
le indica si CD
dirige "izquierda" o "derecha" de la línea negra.
Realmente no queremos saber si es izquierda o derecha; todo lo que queremos es asegurarnos de que tengan la misma dirección o la dirección opuesta, por eso multiplicamos los dos valores.
Por lo tanto, el siguiente pseudocódigo debería funcionar:
z1 = (xB-xA)*(yC-yA) - (yB-yA)*(xC-xA);
z2 = (xB-xA)*(yD-yC) - (yB-yA)*(xD-xC);
z3 = z1 * z2;
if (z3 < 0)
; /* Pointing towards (BUT maybe even crossing) */
else if (z3 > 0 || z2 != 0)
; /* Pointing away */
else
; /* Parallel */
Me temo que necesito algo de tiempo para escribir una solución adecuada para la curva de Bezier. ¿La siguiente situación es hacia o lejos?
Asumiendo que el punto de inicio es el círculo verde, y el punto final es la flecha roja
Calcule la distancia entre el punto inicial como DS y el segmento negro, y haga lo mismo para el punto final (flecha roja) que DE. Si DS> DE, entonces el segmento está apuntando hacia. si DE> DS, está apuntando hacia afuera. Si ambos son iguales, los dos son paralelos.
Puede encontrar cómo calcular la distancia desde un punto a un segmento aquí , y a una curva bezier cuadrática aquí . Sin embargo, dependiendo de la forma de la curva de Bezier, podría arrojar resultados extraños (la curva puede cruzarse a sí misma)