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 :

Problème de structure de données


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 79
    Par défaut Problème de structure de données
    Bonjour,
    j'ai un problème de C++ qui est en fait un problème d'algorithmique, enfin je le crois.
    Dans mon programme, pour un mur donné, je crée un tableau contenant le nom de chacune des zones auxquelles il est lié (j'appelle cela des connexions).
    Un mur peut être lié plusieurs fois à une zone.
    Par exemple pour un mur X, j'ai le tableau : 1 | 1 | 1 | 3 | 3 | 4 |
    (Donc mon mur X est lié 3 fois à la zone 1, 2 fois à la zone 3 et une fois à la zone 4.)
    A chaque connexion est associée une liste de points représentant le polygone de la connexion (j'ai créé la fonction me retournant la liste de points associée à la connexion en position n° i dans le tableau ci-dessus).
    Mon but est de fusionner les polygones relatifs à une même zone (la zone 1 et la zone 3 dans mon exemple). Il y a donc une histoire de comparaison de chaînes de caractères.
    J'ai mon algorithme d'union de deux polygones (donc pour N polygones il va falloir faire ça récursivement je pense).
    Mon problème : je ne sais pas comment m'y retrouver dans tout cela, i.e. comment organiser mon code et utiliser les structures de données appropriées.
    Merci de votre aide !

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

    C'est pas très clair, "un mur est lié à une zone". Par exemple, si un mur est posé par terre, il est lié au sol avec la zone de contact entre le mur et le sol ?

    Et ça n'a aucun sens qu'un mur puisse être lié plusieurs fois avec la même surface.

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 79
    Par défaut
    La notion de zone n'est pas assez explicite, désolé. Une zone = une pièce. Donc si mon mur sépare le hall d'entrée de la cuisine et de la chambre, j'ai 3 connexions. Le fait que je puisse avoir plusieurs connexions avec la même pièce vient du fait que la connexion est géométrique, et que la façon dont le logiciel d'architecture exporte le modèle au format IFC (format sur lequel je travaille) n'est pas simple.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ok, c'est déjà un peu plus clair.

    Dans ton exemple (pour un mur X, j'ai le tableau : 1 | 1 | 1 | 3 | 3 | 4 |), si tu as déjà l'algo pour fusionner deux polygones, il suffit d'appliquer cet algo sur les deux premières connexions, puis sur les deux premières connexions fusionnées et la troisième, et enfin sur la quatrième et la cinquième.

    Il y a une phrase de ton premier post qui reste floue :
    Il y a donc une histoire de comparaison de chaînes de caractères.
    Tu peux détailler un peu plus ?

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 79
    Par défaut
    J'ai avancé sur mon problème. Au lieu de construire un tableau comme précédemment, j'ai fait un vector de string (plus facile). Puis j'ai réussi à partir de ce dernier à construire un vecteur de Connex, où Connex est une structure contenant :
    - un string s (genre "1" pour zone 1)
    - un vecteur d'entiers tab contenant la liste des positions des connexions associées à cette zone (en partant de 0).
    En reprenant mon exemple j'ai donc :
    1 -> 0-1-2
    3 -> 3-4
    4 -> 4
    Il me faut maintenant, pour chaque Connex de mon vecteur, calculer l'union des polygones formés par les listes de points associées à chaque indice du tab correspondant.

    Il y a une phrase de ton premier post qui reste floue :
    Citation:
    Il y a donc une histoire de comparaison de chaînes de caractères.
    Tu peux détailler un peu plus ?
    Bien sûr. Pour construire le vecteur de Connex j'ai dû comparer les chaînes contenues dans mon vecteur de string.
    Voici mon code pour ceux que ça intéresse :
    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
    vector<Connex> fusion(Step::RefPtr<ifc2x3::IfcWallStandardCase> mur,vector<string> tab_connexions)
    	{
    	vector<Connex> v_connex;
     
    	string temp,temp2;
    	int i=0,j;
    	vector<string>::iterator iter_tab_conn,iter_tab_conn2;
    	for(iter_tab_conn = tab_connexions.begin();iter_tab_conn!=tab_connexions.end();++iter_tab_conn)
    		{
    		temp = *iter_tab_conn;
    		if(strcmp(temp.c_str(),"done")!=0)
    			{
    			Connex connex_temp;
    			connex_temp.s = temp;
    			connex_temp.tab.push_back(i);
    			j=0;
    			for(iter_tab_conn2 = tab_connexions.begin();iter_tab_conn2!=tab_connexions.end();++iter_tab_conn2)
    				{
    				temp2 = *iter_tab_conn2;
    				if(j!=i && strcmp(temp2.c_str(),temp.c_str())==0)
    					{
    					connex_temp.tab.push_back(j);	
    					tab_connexions[j]="done";
    					}
    				j++;
    				}
    			tab_connexions[i]="done";
    			v_connex.push_back(connex_temp);
    			}
    		i++;
    		}
    	return v_connex;
    	}

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Je crois avoir compris ce que tu veux : de l'aide pour implémenter ton algorithme d'union de deux polygones. Si c'est ça, ça pourrait aider d'avoir des renseignements sur l'algo à implémenter (son nom s'il en a un, le document sur lequel tu as vu sa description, ou d'autres ressources).

Discussions similaires

  1. [XL-2007] Problème d'optimisation (boucle/structure de données)
    Par Craquos dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/10/2014, 17h52
  2. problème lecture fichier avec structures de données
    Par hannibal007 dans le forum Débuter
    Réponses: 3
    Dernier message: 09/04/2013, 19h51
  3. Réponses: 2
    Dernier message: 09/08/2008, 13h30
  4. Problème structure de données
    Par cocol dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 17/04/2008, 13h30
  5. Structure de données de type "RECORD"
    Par chaours dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/09/2002, 17h10

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