IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mathématiques Discussion :

[géométrie] vérification et traitement de 2 segments se chevauchants


Sujet :

Mathématiques

  1. #1
    Membre habitué
    Inscrit en
    Février 2004
    Messages
    363
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 363
    Points : 161
    Points
    161
    Par défaut [géométrie] vérification et traitement de 2 segments se chevauchants
    Bonjour,

    Voilà, j'ai besoin de faire un algo qui prend en paramètres 2 segments, dont les point sont connus. Cet algo doit vérifier si les 2 segments se chevauchent partiellement ou non (s'ils se croisent, ça ne compte pas), et si tel est le cas, supprimer la partie se chevauchant pour en ressortir un ou deux nouveau segments.

    Mon problème est que, je ne me rappelle plus du tout de mes cours de math

    Je vois à peu près comment ressortir le ou les nouveau(x) segment(s), cependant je ne vois pas comment vérifier si deux segments se chevauchent ou non.

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Points : 923
    Points
    923
    Par défaut
    Le mieux à faire à mon avis pour savoir si les segments se chevauchent c'est de tester dans un premier temps si les extrémités sont alignées (produit vectoriel nul, ...), et dans un deuxième temps, de raisonner en termes de distances algébriques (à l'aide de produits scalaires ?)

  3. #3
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Ce problème est-il dans le plan dans l'espace ????
    Que signifie ils se 'croisent' ?
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  4. #4
    Membre habitué
    Inscrit en
    Février 2004
    Messages
    363
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 363
    Points : 161
    Points
    161
    Par défaut
    j'ai résolu en grande partie le problème, désolé de ne pas avoir répondu depuis.

    1. Je vérifie que les équations de mes 2 segments (ax + b) sont identiques.

    2. je vérifie si l'extrémité d'un des 2 segments est sur l'autre segment (par les x et les y).

    3. si tel est le cas, j'en ressort mes nouveaux segments voulus.

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Points : 923
    Points
    923
    Par défaut
    Qu'est-ce qui te manque encore alors ?

    Attention quand même avec les équations de la forme y = ax + b, si la droite est verticale ça ne marchera pas.
    Pour tester l'alignement tu peux calculer un déterminant: (x-x')(y-y") - (x-x")(y-y'), égal à 0 si les points de coordonnées (x, y), (x', y'), (x", y") (en repère orthonormé) sont alignés.
    Après, pour connaître l'ordre d'alignement il te suffit de comparer leurs coordonnées.

    Cela t'évite de calculer des équations de droite, et aussi de diviser par 0.

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    une autre solution est de calculer les angles en prenant un segment et un sommet de l'autre.

    Si les 2 angles sont 180 degrés, c'est fini..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  7. #7
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 450
    Points : 1 630
    Points
    1 630
    Par défaut
    Un algo tiré tout droit du Cormen, savoir si deux segments p1p2 et p3p4 s'intersectent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    INTERSECTION-SEGMENTS(p1,p2,p3,p4)
    d1 = DIRECTION(p3,p4,p1)
    d2 = DIRECTION(p3,p4,p2)
    d3 = DIRECTION(p1,p2,p3)
    d4 = DIRECTION(p1,p2,p4)
     
    si ((d1>0 et d2 < 0) ou (d1 < 0 et d2 > 0)) et
             ((d3 > 0 et d4 < 0) ou (d3 < 0 et d4 > 0)
                  alors retourner VRAI
    sinon si d1 = 0 et SUR-SEGMENT(p3,p4,p1)
            alors retourner VRAI
    sinon si d2 = 0 et SUR-SEGMENT(p3,p4,p2)
            alors retourner VRAI
    sinon si d3 = 0 et SUR-SEGMENT(p1,p2,p3)
            alors retourner VRAI
    sinon si d4 = 0 et SUR-SEGMENT(p3,p4,p4)
            alors retourner VRAI
            sinon retourner FAUX
     
    DIRECTION(pi,pj,pk)
       retourner (pk - pi) x (pj - pi)
     
    où x est le "produit vectoriel" de p1xp2 (le determinant dans ce cas de [p1 p2] = x1*y2 - x2*y1)
     
    SUR-SEGMENT(pi,pj,pk)
       si min(xi,xj) <= xk <= max(xi,xj) et min(yi,yj) <= yk <= max(yi,yj)
             alors retourner VRAI
             sinon retourner FAUX
    Je ne réponds à aucune question par MP, posez vos questions sur le forum adéquat.
    Profils : G+ - LinkedIn

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. traitement video extraire segments
    Par devhercule dans le forum Vidéo
    Réponses: 4
    Dernier message: 16/05/2014, 16h52
  2. traitement d'image: segmentation avec opencv dans python
    Par Bimboucha dans le forum Bibliothèques tierces
    Réponses: 25
    Dernier message: 09/04/2014, 15h14
  3. Traitement d'image segmentation couleurs
    Par colorid dans le forum Langage
    Réponses: 11
    Dernier message: 28/06/2012, 12h57
  4. Vérification SQL après traitement JS
    Par Jarodd dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/11/2008, 13h45
  5. [Traitement d'image] segmentation de photo
    Par fatjoe dans le forum Webdesign & Ergonomie
    Réponses: 3
    Dernier message: 22/07/2008, 20h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo