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? P>
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. P>
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 p>
3 Réponses :
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. P>
construire un vecteur normal à d (la direction de la ligne) appelée n. p>
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. P>
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.
Vous pouvez simplement vérifier si deux lignes (votre ligne et une ligne de segment de ligne) intersectent et évaluent le point d'intersection. P>
ligne 1: (x, y) (t) = p + t * d; Ligne 2: (x, y) (t) = p1 + k * (p2 - p1) p>
au point d'intersection: P + T * D = P1 + K * (P2 - P1) - Deux équations (par x et par Y) p>
à 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) p>
let let Vous avez une intersection s'il y a un Par exemple: p>
let let => => => => p (x, y) code> et
a code> sa direction L'équation de ligne est
d = A.x + b code>
où
b = y - a.x code> p>
p1 (x1, y1) code> et
p2 (x2, y2) code> un segment quelle équation est
d '= a'.x + b' < / code> pour tout
x code> dans
[x1; x2] code>
où
a '= (y2-y1) / (x2-x1) code> et
b' = y2 - a'.x2 = y1 - a'.x1 code> p> p> P>
x code> entre
[x1; x2] code> pour lequel
d = d ' code>
Ainsi si
x = (b'-b) / (a-a ') code> appartient à
[x1; x2] code>
alors
y = A.x + b = a'.x + b code> vous donne le point d'intersection
p (x, y) code> p> p> p>
p (255.255) code>,
a = 1 code>
=>
b = 0 code> p>
p1 (60,179) code> et
p2 (168,54) code> p>
a '= -125/108 code> p>
b '= 24596/99 code> p>
x = (24596/99 - 0) / (1 + 125/108) = 115,1587983 code> p>
y = (24596/99 - 0) / (1 + 125/108) = 115,1587983 code> p>
x code> est compris entre 60 et 168, il y a donc un point d'intersection à
p (x, y) code> p> p>
Veuillez afficher vos expressions pour la ligne et le segment afin que nous puissions aligner les réponses. Tnx!