Dati i 4 punti che descrivono 2 segmenti di linea, come si calcola se la linea A è verso o lontano dalla linea B?
Le 2 linee hanno una lunghezza fissa e possono essere misurate come distanza da x1 / y1 a x2 / y2.
Dati i 4 punti che descrivono 2 segmenti di linea, come si calcola se la linea A è verso o lontano dalla linea B?
Le 2 linee hanno una lunghezza fissa e possono essere misurate come distanza da x1 / y1 a x2 / y2.
Risposte:
Lasciare A
e B
essere due punti sulla linea nera. Lascia C
che D
sia il tuo segmento blu. Il segno della z
coordinata del prodotto incrociato AB^AC
indica se C
è "sinistra" o "destra" della linea nera. Allo stesso modo, il prodotto incrociato AB^CD
ti dice se CD
dirige "a sinistra" o "a destra" della linea nera.
Non vogliamo davvero sapere se è sinistra o destra; tutto ciò che vogliamo è assicurarci che siano nella stessa direzione o nella direzione opposta, ecco perché moltiplichiamo i due valori.
Il seguente pseudocodice dovrebbe pertanto funzionare:
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 */
Temo di aver bisogno di un po 'di tempo per scrivere una soluzione adeguata per la curva di Bezier. La seguente situazione è verso o lontano?
Supponendo che il punto iniziale sia il cerchio verde e il punto finale sia la freccia rossa
Calcola la distanza tra il punto iniziale come DS e il segmento nero e fai lo stesso per il punto finale (freccia rossa) come DE. Se DS> DE, il segmento punta verso. se DE> DS, punta lontano. Se entrambi sono uguali, i due sono paralleli.
È possibile trovare il modo di calcolare la distanza da un punto ad un segmento qui , e per una curva di Bézier quadratica qui . Tuttavia, a seconda della forma della curva di Bezier, potrebbe restituire risultati strani (la curva può incrociarsi)