Étant donné les 4 points décrivant 2 segments de ligne, comment calculer si la ligne A est vers ou loin de la ligne B?
Les 2 lignes ont une longueur fixe et peuvent être mesurées comme la distance de x1 / y1 à x2 / y2.
Étant donné les 4 points décrivant 2 segments de ligne, comment calculer si la ligne A est vers ou loin de la ligne B?
Les 2 lignes ont une longueur fixe et peuvent être mesurées comme la distance de x1 / y1 à x2 / y2.
Réponses:
Soit A
et B
soit deux points sur la ligne noire. Laissez C
et D
soyez votre segment bleu. Le signe de la z
coordonnée du produit croisé AB^AC
vous indique si C
est "gauche" ou "droite" de la ligne noire. De même, le produit croisé AB^CD
vous indique si vous CD
orientez "à gauche" ou "à droite" de la ligne noire.
Nous ne voulons pas vraiment savoir si c'est à gauche ou à droite; tout ce que nous voulons, c'est nous assurer qu'ils sont dans la même direction ou dans la direction opposée, c'est pourquoi nous multiplions les deux valeurs.
Le pseudocode suivant devrait donc fonctionner:
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 */
J'ai peur d'avoir besoin de temps pour écrire une solution appropriée pour la courbe de Bézier. La situation suivante est-elle proche ou éloignée?
En supposant que le point de départ est le cercle vert et le point final est la flèche rouge
Calculez la distance entre le point de départ comme DS et le segment noir, et faites de même pour le point d'arrivée (flèche rouge) comme DE. Si DS> DE, alors le segment pointe vers. si DE> DS, il pointe loin. Si les deux sont égaux, les deux sont parallèles.
Vous pouvez trouver comment calculer la distance d'un point à un segment ici , et à une courbe de Bézier ici . Cependant, selon la forme de la courbe de Bézier, cela pourrait retourner des résultats étranges (la courbe peut se croiser)