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

MATLAB Discussion :

créer des graphes orientés à partir des points 2D


Sujet :

MATLAB

  1. #1
    Membre régulier
    Enseignant Chercheur
    Inscrit en
    Décembre 2011
    Messages
    172
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 172
    Points : 73
    Points
    73
    Par défaut créer des graphes orientés à partir des points 2D
    bonjour a tous

    j'ai un ensemble des points et je cherche a les relier entre eux pour former des graphes orientés.
    les points (2,1) (1,2) (2,3) (3,4) (4,5) et les cordonnées x y sont dans les deux tableaux:
    x= [2 1 2 3 4]
    y=[1 2 3 4 5]
    je veux avoir une structure Point2D (par exemple) qui contient les liaisons suivantes:
    Point p1: (2,1) sera relier par le reste points: (1,2) (2,3) (3,4) (4,5)
    Point p2: (1,2) sera relier par le reste points: (2,3) (3,4) (4,5)
    Point p3: (2,3) sera relier par le reste points: (3,4) (4,5)
    Point p4: (3,4) sera relier par le reste points: (4,5)
    voila j'ai commencer par ce code, mais toujours j'obtiens le même nombre de liaison pour tout les points :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Point2D = struct;
    x= [2 1 2 3 4];
    y=[1 2 3 4 5];
    vect={};
    for i = 1:5
        k=1;
        for j = i+1:5
            tx(k)=x(j);
            ty(k)=y(j);
            k=k+1;
        end
        Point2D(i).X=tx;
        Point2D(i).Y=ty;
    end

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Le problème est que tu conserves tx et ty entre deux itérations, et ne fait donc que modifier les premières valeurs de la première itération tout en conservant ses dernières.
    Un solution en supprimant ta boucle imbriquée comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i = 1:4 % ou plus généralement numel(x)-1
        Point2D(i).X = x(i+1:end);
        Point2D(i).Y = y(i+1:end);
    end

  3. #3
    Membre régulier
    Enseignant Chercheur
    Inscrit en
    Décembre 2011
    Messages
    172
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 172
    Points : 73
    Points
    73
    Par défaut
    re bonjour
    Maintenant si je veux avoir dans Point2D les indices des éléments dans le tableau et n'est pas le contenu de la case?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Je n'ai pas saisi ta question

  5. #5
    Membre régulier
    Enseignant Chercheur
    Inscrit en
    Décembre 2011
    Messages
    172
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 172
    Points : 73
    Points
    73
    Par défaut
    Voilà je cherche les indices des éléments qui forment le struct Point2D
    Normalement je dois utiliser la fonction find, voila mon code mais dans ce cas j'ai pas les bonnes indices :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Point2D = struct;
    x=[52 57 62];
     
    %vect={};
    for i = 1:numel(x)-1
     Point2D(i).X = find(x(i:end));
    end
    dans ce cas je cherche a avoir :
    Point2D(1).X --> 1 2 3
    Point2D(2).X --> 2 3

  6. #6
    Invité
    Invité(e)
    Par défaut
    Tu veux dire les indices correspondant à Point2D(i).X = x(i+1:end); ?
    (je vois que tu as retiré le +1... j'imagine que c'est normal ? La limite supérieure de la boucle serait je pense alors numel(x))

    Si oui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    NbElements = numel(x);
    for i = 1 : NbElements
        Point2D(i).X = x(i:end);
        Point2D(i).Y = y(i:end);
        Point2D(i).indices = i:NbElements;
    end

  7. #7
    Membre régulier
    Enseignant Chercheur
    Inscrit en
    Décembre 2011
    Messages
    172
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 172
    Points : 73
    Points
    73
    Par défaut
    oui c'est exactement ce que je cherche! Merci

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 10/07/2015, 18h18
  2. Créer des menus déroulants à partir des champs textes
    Par abdelkarim_1987 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 08/10/2013, 13h40
  3. Réponses: 10
    Dernier message: 18/04/2007, 09h39
  4. Réponses: 3
    Dernier message: 25/07/2005, 09h40

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