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

Algorithmes et structures de données Discussion :

sommets consécutifs d'un quadrilatère


Sujet :

Algorithmes et structures de données

  1. #1
    jlf
    jlf est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 140
    Points : 49
    Points
    49
    Par défaut sommets consécutifs d'un quadrilatère
    bonjour

    soient A,B,C,D 4 points quelconques d'un plan

    je voudrais trouver un ordre pour lequel ces 4 points forment les sommets consécutifs d'un quadrilatère

    j'ai pensé à ça :
    je fixe 3 points arbitrairement, par ex A, B et D comme 1, 2 et 4ème point

    si C est bien le 3ème alors il n'y a pas d'intersection AB-CD ni AD-BC

    s'il y a une intersection AB-CD je permute B et C et s'il y a une intersection AD-CD je permute C et D

    ça doit marcher mais ça ne me semble pas très efficace comme algo, il y a peut-être mieux ?

    merci de votre aide

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Je vais peut-etre dire une betise, mais ne suffit-il pas que les angles orientés (AB,AC) et (AC,AD) soient de meme signe ?

  3. #3
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    algorithme du "gift-wrapping" :

    1) calculer le point de X maximum, Y minimum
    2) trier les points par angle croissant à partir de ce point
    3) c'est fini....

    est ton ami

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    C'est pas un algo de caclul d'enveloppe convexe le "gift-wrapping" ? Parceque dans ce cas, ca marche pas si le point D est a l'interieur du triangle ABC.

    Et puis ca me semble un peu "enorme" comme methode, juste pour savoir si on doit inverser C et D parceque le polygone est croisé. Alors qu'un bete calcul de determinant... et encore, seul le signe nous interesse.

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Vous voulez sans doute dire quadrilatère convexe, car 4 points sont toujours les sommets consécutifs d'un quadrilatère (éventuellement croisé).
    Je propose cela :
    Ecrire les equations des 6 droites: (AB) (AC) (AD) (BC) (BD) (CD)
    Testez, dans l'ordre, pour quelle droite les deux points restant sont du même côté. Il suffit de remplacer les coordonnées des points dans l'équation et de considérer le signe.
    Mettons que vous trouvez (AC) ce qui veut dire que B et D sont du même côté de (AC).
    Regardez alors si A et D sont du même côté de (BC) alors c'est ACBD, sinon c'est ACDB

  6. #6
    jlf
    jlf est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 140
    Points : 49
    Points
    49
    Par défaut
    >Vous voulez sans doute dire quadrilatère convexe, car 4 points
    > sont toujours les sommets consécutifs d'un quadrilatère
    > (éventuellement croisé

    convexe ou non, je veux seulement que le dessin à main levée en suivant l'ordre des 4 sommets ne donne pas un quadri croisé

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Citation Envoyé par jlf
    >Vous voulez sans doute dire quadrilatère convexe, car 4 points
    > sont toujours les sommets consécutifs d'un quadrilatère
    > (éventuellement croisé

    convexe ou non, je veux seulement que le dessin à main levée en suivant l'ordre des 4 sommets ne donne pas un quadri croisé
    Autant pour moi ! un quadrilatère peut être ni convexe ni croisé.
    Mais la méthode que je donne fonctionne. On peut même la simplifier.
    On n'a pas besoin des 6 droites.
    On teste les points B et C par rapport à (AB)
    S'ils sont du même côté on teste A et D par rapport à (BC)
    si du même côté
    ABCD est OK
    Sinon ABDC
    En cas d'échec cest encore plus simple !
    On peut prendre ACBD ou ADBC les deux sont bons, cela revient à inverser le sens de rotation

  8. #8
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    idem Zavonen. Mais je prefere comparer les signes des determinants.

    si je ne me trompe pas ca doit faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    s1 = sgn( det(AB,AC) )
    s2 = sgn( det(AC,AD) )
    si s1=s2 alors quadrilatere=ABCD
    sinon {
      s3 = sgn( det(AB,AD) )
      si  s2=s3 alors quadrilatere=ACBD
      sinon quadrilatere=ABDC
    }
    a verifier quand meme...

  9. #9
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par pseudocode
    C'est pas un algo de caclul d'enveloppe convexe le "gift-wrapping" ? Parceque dans ce cas, ca marche pas si le point D est a l'interieur du triangle ABC.

    Et puis ca me semble un peu "enorme" comme methode, juste pour savoir si on doit inverser C et D parceque le polygone est croisé. Alors qu'un bete calcul de determinant... et encore, seul le signe nous interesse.
    autant pour moi j'avais compris convexe dans post d'origine...

    Désolé c'était la digestion

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Citation Envoyé par pseudocode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    s1 = sgn( det(AB,AC) )
    s2 = sgn( det(AC,AD) )
    si s1=s2 alors quadrilatere=ABCD
    sinon {
      s3 = sgn( det(AB,AD) )
      si  s2=s3 alors quadrilatere=ACBD
      sinon quadrilatere=ABDC
    }
    a verifier quand meme...
    Entièrement d'accord avec pseudocode. Nos méthodes sont foncièrement les mêmes mais c'est plus simple d'utiliser le signe du déterminant que les équations de droite. Le signe du dét donne le sinus de l'angle orienté des deux vecteurs, nous dit donc si cet angle est entre 0 et pi ou bien entre -pi et 0, cela donne bien la position relative des points par rapport à AC

  11. #11
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    autrement, pour varier: prendre 2 points, et chercher la position des 2 autres par rapport à cette droite (via les surdroites en x et y)

Discussions similaires

  1. Tri de sommets d'un quadrilatère quelconque
    Par supernovagm dans le forum Traitement d'images
    Réponses: 10
    Dernier message: 02/08/2012, 15h30
  2. Calcul du plu court chemin entre 2 sommets d'un graphe valué
    Par atlasm dans le forum Algorithmes et structures de données
    Réponses: 25
    Dernier message: 07/08/2005, 17h06
  3. aggréger les espaces consécutifs
    Par lalystar dans le forum Administration
    Réponses: 2
    Dernier message: 13/10/2004, 12h19
  4. Blit consécutif
    Par lvdnono dans le forum DirectX
    Réponses: 2
    Dernier message: 06/08/2004, 09h39
  5. dessin d'un arc entre deux sommet
    Par yesra dans le forum C++Builder
    Réponses: 3
    Dernier message: 24/04/2004, 16h43

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