Comment savoir si des segments se croisent
Jonathan
-
Jonathan -
Jonathan -
Bonjour
Je programme un logiciel de dessin vectoriel spécifique à l'électronique.
J'ai besoin de vérifier si les segments (vecteurs) du dessin se croisent.
Pour ça j'avais une methode fiable mais beaucoup trop longue.
J'ai trouvé ça :
http://perso.3ie.org/yannick.lejeune/2004/05/comment-savoir-si-deux-segments-se.html
Mais malheureusment ça ne fonctionne pas bien, et je ne suis pas assez fort en math pour comprendre ce qui ne fonctionne pas.
Quelqu'un connait-il un algorithme éprouvé pour ce genre de fonction ?
Merci
Je programme un logiciel de dessin vectoriel spécifique à l'électronique.
J'ai besoin de vérifier si les segments (vecteurs) du dessin se croisent.
Pour ça j'avais une methode fiable mais beaucoup trop longue.
J'ai trouvé ça :
http://perso.3ie.org/yannick.lejeune/2004/05/comment-savoir-si-deux-segments-se.html
Mais malheureusment ça ne fonctionne pas bien, et je ne suis pas assez fort en math pour comprendre ce qui ne fonctionne pas.
Quelqu'un connait-il un algorithme éprouvé pour ce genre de fonction ?
Merci
A voir également:
- Comment savoir si des segments se croisent
- Segment : signaler des connexions entre tableaux et non TCD - Forum Excel
2 réponses
salut,
étant donné que je suis pas spécialisé dans le domaine, et que j'ai la flemme de chercher plus longtemps (sachant que mes tests furent conluant), je suppose que les fonctions sur la page que tu as trouvé sont correctes. si ce n'est que d'après ce que j'ai compris il suffit de faire return (dx1 * dy2 - dy1 * dx2); plutot que return Math.Sign(dx1 * dy2 - dy1 * dx2); enfin je crois :/
bon alors quoi qui va pas plus précisément ?
étant donné que je suis pas spécialisé dans le domaine, et que j'ai la flemme de chercher plus longtemps (sachant que mes tests furent conluant), je suppose que les fonctions sur la page que tu as trouvé sont correctes. si ce n'est que d'après ce que j'ai compris il suffit de faire return (dx1 * dy2 - dy1 * dx2); plutot que return Math.Sign(dx1 * dy2 - dy1 * dx2); enfin je crois :/
bon alors quoi qui va pas plus précisément ?
En fait il y avait deux choses. L'une des deux etait simplement une erreur de frappe de ma part :-)
Part contre, l'autre, c'est quand 2 segments sont dans la prolongation l'un de l'autre, mais ne se croisent pas, alors l'algo renvoie "Oui", et quelque soit l'angle des segments.
Si je n'utilise pas la fontion Sign, alors l'algo renvoie encore plus de "oui" quand il n'y a pas lieu.
Je pense que quand les segments sont alignés, les 4 GetSigne renvoient 0 (zéro), et il s'agit alors d'un cas à traiter à part.
Merci
et…
bonne année !
mon programme par là :
http://www.epoxy.fr.st
Part contre, l'autre, c'est quand 2 segments sont dans la prolongation l'un de l'autre, mais ne se croisent pas, alors l'algo renvoie "Oui", et quelque soit l'angle des segments.
Si je n'utilise pas la fontion Sign, alors l'algo renvoie encore plus de "oui" quand il n'y a pas lieu.
Je pense que quand les segments sont alignés, les 4 GetSigne renvoient 0 (zéro), et il s'agit alors d'un cas à traiter à part.
Merci
et…
bonne année !
mon programme par là :
http://www.epoxy.fr.st