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

C++ Discussion :

Graphe


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 114
    Par défaut Graphe
    Bonjour,

    J'essaie de dessiner les fleches d'un graphe orienté. Pour ce faire, je calcule le point d'intersection entre le cercle représentant le noeud "tête" et la droite représentant l'arc.

    Voici le code :
    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
     
          //equation de la droite :
          //y = a * x + b
          double a = (yq - yt) / (xq - xt);
          double b = yq - a * xq;
     
          //equation du cercle
          //(x - xt)² + (y - yt)² = rt²
     
          //Points d'intersection
          double A = 1 + a * a;
          double B = - 2 * xt + 2 * a * b - 2 * a * yt;
          double C = xt * xt + b * b - 2 * b * yt + yt * yt - rt * rt;
          double delta = B * B - 4 * A * C;
          double x0 = (- B - sqrt(delta)) / 2 * A;
          double x1 = (- B + sqrt(delta)) / 2 * A;
          double y0 = a * x0 + b;
          double y1 = a * x1 + b;
    Bien-sûr j'ai fait les calculs à la main. Le résultat :



    Soit les calculs sont faux, soit il y a un probème avec les arrondis liés aux double, soit je sais pas !

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 150
    Par défaut
    1. Quel rapport avec le C++ ?
    2. C'est quoi ce graphe ?
    3. Quel compilo, quel os, quel est le bout de code qui plante ?
    4. Decrit mieux et en francais ton probleme.

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Je te propose plus simple :

    Soient T et Q les sommets définissant ton arête, et R le rayon du cercle représentant les sommets.

    Tu sais que la distance entre Q et le point que tu souhaites obtenir est égale au rayon du cercle. Il n'y a donc qu'à "raccourcir" ton segment de cette distance.

    -> Prends ton vecteur QT (pour avoir la direction du segment) normalise le, multiplie le par R, puis retranche ça à Q pour avoir ton point.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 114
    Par défaut
    Je réponds un peu tard à cause des vacances...

    Alors merci loulou ça marche du tonnere ! T'es un gagnant !

    Voici mon code pour les recherches sur le forum
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
        //La pointe de la fleche est le triangle ABI
        //I est son extremité, [AB] sa base, M le milieu de [AB]
        //Q la queue et T la tete.
     
        //Longueur de la pointe
        double lp = 10;
     
        //Demi longueur de la base de la pointe
        double lb = 4;
     
        int xI, yI;
     
        //Vecteur QT
        double XQT = x0 - x1;
        double YQT = y0 - y1;
     
        //Longeur de QT
        double LQT2 = XQT * XQT + YQT * YQT;
        double LQT = sqrt(LQT2);
     
        //Normalisation (Vecteur unitaire)
        double XU = XQT / LQT;
        double YU = YQT / LQT;
     
        //Vecteur IT
        double XIT = XU * r;
        double YIT = YU * r;
     
        //Vecteur QI
        double XQI = XQT - XIT;
        double YQI = YQT - YIT;
     
        //Coordonnees de I
        xI = x1 + (int) XQI;
        yI = y1 + (int) YQI;
     
        //Vecteur unitaire V normal a U
        double XV = - YU;
        double YV = XU;
     
        //Deux nouveux vecteurs donnent la base de la pointe : MA et MB.
     
        //Vecteur MI
        double XMI = XU * lp;
        double YMI = YU * lp;
     
        //Coordonnees de M
        double xM = xI - XMI;
        double yM = yI - YMI;
     
        //Coordonnes de A
        int xA = (int) (xM + XV * lb);
        int yA = (int) (yM + YV * lb);
     
        //Coordonnees de B
        int xB = (int) (xM - XV * lb);
        int yB = (int) (yM - YV * lb);
    Bien sûr ça devrait pas etre sur un forum c++... Tant pis

  5. #5
    Membre éclairé Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Par défaut
    Ca m'intéresse ce programme pour faire des graphes. C'est quelle bibliothèque ?
    Merci

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 114

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

Discussions similaires

  1. Classe pour la création d'un graphe xy
    Par Bob dans le forum MFC
    Réponses: 24
    Dernier message: 03/12/2009, 17h20
  2. [Turbo Pascal] [Windows XP] Problème avec l'unité GRAPH
    Par themofleur dans le forum Turbo Pascal
    Réponses: 22
    Dernier message: 29/03/2003, 22h43
  3. Perl & Graphes
    Par makram9999 dans le forum Modules
    Réponses: 4
    Dernier message: 24/03/2003, 11h24
  4. [] [Excel] Exporter un graphe MSChart vers Excel
    Par Gonzo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/12/2002, 17h49
  5. Concerne les graphes
    Par mcr dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 12/11/2002, 11h02

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