in_your_phion | salut Merci, en fait j'ai trouvé comment faire .... mais maintenant j'ai un ENOoOoOOooooOOooOooooooOOOOOoooOOOOOOoOOorme problème relatif à la programmation c'est in-dé-bu-ga-bl-euh, je comprend pas, je comprend pas, je comprend pas ....je comprend pas. Je met ce que j'ai si une bonne âme veut bien aider c'est vraiment génial mes structures :
Code :
- typedef struct data {
- //on a besoin de stocke le centre, et les coins
-
- int * m; // centre de la feuille en m = [x,y]
- //repère image dans le sens trigo
- int *m_c00;
- int *m_c10;
- int *m_c11;
- int *m_c01;
- }data;
- typedef struct leaf {
- enum {BLACK, WHITE} color; //si c'est blanc on a des fils, si c'est noir on en a pas
-
- data *coords;
- struct leaf * LP; //feuille parente
- struct leaf * L00; //feuille 00,10,11,01 = fils
- struct leaf * L10;
- struct leaf * L11;
- struct leaf * L01;
- }leaf;
- typedef struct quadtree {
- leaf * root; // la racine du quadtree
- }quadtree;
|
bon j'usqu'ici ca va ....alors ensuite j'ai crée une fonction qui me pond un alloc pour chaque feuille du quadtree (et son homologue free, etc, je les mets pas ici)
Code :
- //je passe le centre et les coins (qui sont enfait des tableau de 2 pour chaque coordonée) et la fonction crée la feuillle
- leaf * leaf_alloc(int *m, int *m_c00, int *m_c10, int *m_c11, int *m_c01) {
- leaf * new_leaf;
- if ( (new_leaf = (leaf*)malloc(sizeof(leaf)) ) == NULL ) {
- fprintf(stderr,"ca chie dans la colle" );
- }
- if ( (new_leaf->coords = (data*)malloc(sizeof(data)) ) == NULL ) {
- fprintf(stderr,"ca chie dans la colle" );
- }
- new_leaf->coords->m = m ;
- new_leaf->coords->m_c00 = m_c00 ;
- new_leaf->coords->m_c10 = m_c10 ;
- new_leaf->coords->m_c11 = m_c11 ;
- new_leaf->coords->m_c01 = m_c01 ;
- new_leaf->color = BLACK;
- new_leaf->LP = NULL;
- new_leaf->L00 = NULL;
- new_leaf->L10 = NULL;
- new_leaf->L11 = NULL;
- new_leaf->L01 = NULL;
- return new_leaf;
- }
|
bon alors jusqu'ici tout va bien, jusqu'ici tout va bien ...alors ensuite j'ai crée une fonction que me subdivise une feuille en quatre, cad qui alloue quatre fils avec les nouvelles coordonnées et centre :
Code :
- void leaf_subdivise(leaf * leaf) {
- //subdivision
- if (!leaf) { // la feuille pointe vers NULL
- fprintf(stderr,"[e] The leaf points to NULL and cannot be subdivided.\n" );
- exit(EXIT_FAILURE);
- } else {
- int * m = leaf->coords->m ;
- int * m_c00 = leaf->coords->m_c00;
- int * m_c10 = leaf->coords->m_c10;
- int * m_c11 = leaf->coords->m_c11;
- int * m_c01 = leaf->coords->m_c01;
- leaf->color = WHITE;
- //on travaille dans un repère image, et on tourne dans le sens trigo
- //centre et dimensions
- //les nouveaux coins et centre de L00
- int L00_corner00[2] = {m_c00[0] ,m_c00[1]};
- int L00_corner10[2] = {m_c00[0] ,m[1] };
- int L00_corner11[2] = {m[0] ,m[1] };
- int L00_corner01[2] = {m[0] ,m_c00[1]};
- int L00_center[2] = { (L00_corner00[0] + L00_corner01[0])/2, (L00_corner00[1] + L00_corner10[1])/2};
- leaf->L00 = leaf_alloc(
- L00_center,
- L00_corner00,
- L00_corner10,
- L00_corner11,
- L00_corner01
- );
- leaf->L00->LP = leaf;
-
- //bon apres je fais pareil pour les 3 autres fils je détaille pas c'est pareil.
- // ....la la la promenons nous dans les champs, donc ...
- }
- }
|
bon alors la ca va encore !!!!!!! Mais le big problème, c'est que dans le main,
je fais :
Code :
- int main(int argc,char *argv[])
- {
- quadtree * TREE = (quadtree*)malloc(sizeof(quadtree));
- int center[2] = {imageX/2,imageY/2}; //bon ca c'est les coordonées de la feuille de départ, i.e mon image
- int c00 [2] = {0,0};
- int c10 [2] = {0,imageY};
- int c11 [2] = {imageX,imageY};
- int c01 [2] = {imageX,0};
-
- TREE->root = leaf_alloc(center,c00,c10,c11,c01);
-
- //la j'appelle leaf subdivise pour tester sur une itération ... ca marche !!
- leaf_subdivise(TREE->root);
- ...
|
donc jusque la ca marche, je récupère bien ma feuille qui est subdivisée avec les nouvelles coordonées pour chacun des fils, mais ensuite j'appelle une fonction
Code :
- dessine_moi_un_quadtree (quadtree * qt, char * lenome);
|
Et là .... je récupère bien mon quadtre avec ces noeuds, sauf que les coordonées sont completements pas bonnes du tous, il me sort ds valeurs du genre {-1073747544,1074402066} ...pourquoi ca marche pas alors que juste avant j'ai bien récupéré ma feuille subdivisée ????
est ce que ca vient de mes structures ? je dois mettre des tableaux ou des int * ???? je comprends plus rien .... si qqu'un peut m'aider please please please
merci par avance |