8
votes

Intersection de la ligne et de la ligne

Comment puis-je détecter si une ligne (direction D et -D du point P) et un segment de ligne (entre points P1 et P2) se croisent en 2D? S'ils le font, comment puis-je obtenir son point d'intersection?

Il y a beaucoup d'exemple comment détecter si deux segments de ligne se croisent, mais cela devrait être un cas encore plus simple.

J'ai trouvé cela mais je ne comprends pas ce qui est un opérateur secondaire: http://www.loria.fr/~ Lazard // arc-visi3d / pant-projet / fichiers / line_segment_line.html


1 commentaires

Veuillez afficher vos expressions pour la ligne et le segment afin que nous puissions aligner les réponses. Tnx!


3 Réponses :


6
votes

S'il s'agit d'une tâche 2D (la ligne et le segment se trouvent dans le même plan et ils sont spécifiés par des coordonnées à 2 dimensions), c'est facile.

construire un vecteur normal à d (la direction de la ligne) appelée n.

Calculez des produits DOT N. (P1-P) et N. (P2-P). S'ils ont le même signe, il n'y a pas d'intersection. S'ils ont des signes opposés, il y a une intersection. Avec un peu de pensée, vous pouvez déterminer comment calculer l'emplacement de l'intersection en termes de p, p1-p et p2-p.


2 commentaires

Pourquoi avez-vous besoin de construire un vecteur normal à d? Vous ne semblez pas utiliser dans l'explication ultérieure ...


Je pense que ce que vous appelez "D" dans les produits de points ultérieurs est en réalité la direction normale.



5
votes

Vous pouvez simplement vérifier si deux lignes (votre ligne et une ligne de segment de ligne) intersectent et évaluent le point d'intersection.

ligne 1: (x, y) (t) = p + t * d; Ligne 2: (x, y) (t) = p1 + k * (p2 - p1)

au point d'intersection: P + T * D = P1 + K * (P2 - P1) - Deux équations (par x et par Y)

à partir de ces équations, vous pouvez simplement trouver des paramètres K et T. Si 0

Si vous connaissez K ou T, vous pouvez simplement calculer le point d'intersection de (x, y) (t) = p + t * d ou (x, y) (t) = p1 + k * (p2 - p1)


0 commentaires

0
votes

let p (x, y) et a sa direction L'équation de ligne est d = A.x + b b = y - a.x

let p1 (x1, y1) et p2 (x2, y2) un segment quelle équation est d '= a'.x + b' < / code> pour tout x dans [x1; x2] a '= (y2-y1) / (x2-x1) et b' = y2 - a'.x2 = y1 - a'.x1

Vous avez une intersection s'il y a un x entre [x1; x2] pour lequel d = d ' Ainsi si x = (b'-b) / (a-a ') appartient à [x1; x2] alors y = A.x + b = a'.x + b vous donne le point d'intersection p (x, y)

Par exemple:

let p (255.255) , a = 1 => b = 0

let p1 (60,179) et p2 (168,54)

=> a '= -125/108

=> b '= 24596/99

=> x = (24596/99 - 0) / (1 + 125/108) = 115,1587983

=> y = (24596/99 - 0) / (1 + 125/108) = 115,1587983

x est compris entre 60 et 168, il y a donc un point d'intersection à p (x, y)


0 commentaires