8
votes

Intersection du segment de ligne Xna?

permet de dire que nous avons 4 vector2 's (oui ceci est 2d), nous avons donc LineONESTART, LINEONEEND, LINESTWOSTART et LINETWOEND.

Comment puis-je détecter si les 2 lignes croient? Je me fiche d'où ils traversent, je veux juste savoir s'ils se croisent.


0 commentaires

3 Réponses :


6
votes

Vérifiez cette formule par Bourke .

J'ai récemment dû résoudre ce problème aussi. Une autre option utilise (obtention) l'équation de la ligne ( y = mx + C ) mais il y a plusieurs cas de bord à laquelle vous devez vous soucier, ainsi que vérifier si le point d'intersection est dans le segment de ligne. La formule du lien ci-dessus fonctionne, bien que je ne puisse pas vraiment commenter comment l'équation est réorganisée, tout ce que je vais dire, c'est ça fonctionne;)

Modifier :

Comme mentionné par Andiog, un autre site que j'ai utilisé (l'exemple est excellent aussi) est-ce Tutoriel . Comme il s'agit de xna, le deuxième lien sera juste dans votre rue.

EDIT (Contenu du lien brisé) :

Les équations des lignes sont PA = P1 + UA (P2 - P1) et PB = P3 + UB (P4 - P3)

résolution du point où pa = pb donne les deux équations suivantes dans deux inconnues (UA et UB) x1 + ua (x2 - x1) = x3 + ub (x4 - x3) et Y1 + UA (Y2 - Y1) = Y3 + UB (Y4 - Y3) La résolution donne les expressions suivantes pour UA et UB

substituer l'une de ces personnes dans l'équation correspondante de la ligne donne le point d'intersection. Par exemple, le point d'intersection (x, y) est x = x1 + ua (x2 - x1) Y = Y1 + UA (Y2 - Y1)

Notes: Les dénominateurs pour les équations pour UA et UB sont les mêmes. Si le dénominateur pour les équations pour UA et UB est 0, les deux lignes sont parallèles. Si le dénominateur et le numérateur des équations pour UA et UB sont 0, les deux lignes sont coïncidentes. Les équations s'appliquent aux lignes, si l'intersection des segments de ligne est requise, il n'est nécessaire que de tester si UA et UB se situent entre 0 et 1. Dans la partie éventuelle de cette plage, le segment de ligne correspondant contient le point d'intersection. Si les deux se trouvent dans la plage de 0 à 1, le point d'intersection est dans les deux segments de ligne.


2 commentaires

+1 pour citer la collection d'algorithmes de géométrie de Bourke. Je l'utilise tout le temps, c'est génial.


@Filip j'ai corrigé le lien brisé!



3
votes

Il y a un Tutoriel sur ce sujet (ligne intersection du segment).


0 commentaires

0
votes

Pour l'exhaustivité, je comprendrai sous l'algorithme lorsque des lignes sont représentées dans (A, B, C) CODE> coordonnées de manière à ce que l'équation de la ligne soit a * x + b * y + c = 0 code>.

  • Deux lignes avec coordonnées (A1, B1, C1) CODE> et (A2, B2, C2) CODE> Intersect à un point (x, y) Code> li>
  • trouver les coordonnées homogènes du point comme p>

    a= -sin(θ);
    b=  cos(θ);
    c= x*sin(θ)-y*cos(θ);
    
  • Si les lignes sont parallèles, alors w = 0 code>. p> li>

  • sinon le point d'intersection est situé à p>

    a= y1-y2;
    b= x2-x1;
    c= x1*y2-y1*x2;
    


0 commentaires