[C]Arbre ayant 4 fils
Corine
-
Corine -
Corine -
Bonjour,
J'ai écrit la fonction de création de mon arbre quaternaire(quadtree)
Je ne mets que le code qui concerne le quadtree.
Si vous avez besoin de voir autres choses pour pouvoir m'aider, je rajouterai.
Le fichier quadtree.h, contient la structure :
Mon quadtree est mal conçu mais je n'arrive pas à le corriger.
De plus, j'aurais à parcourir l'arbre pour récupérer les sommets(en évitant les doublons) et pour définir les faces du maillage qu'il faudra mettre dans des tableaux.
Ca permettra de créer le sol
Je voudrai savoir s'il faut que je rajoute des champs à ma structure et comment m'y prendre
J'ai écrit la fonction de création de mon arbre quaternaire(quadtree)
Je ne mets que le code qui concerne le quadtree.
Si vous avez besoin de voir autres choses pour pouvoir m'aider, je rajouterai.
Le fichier quadtree.h, contient la structure :
#ifndef QUADTREE_H #define QUADTREE_H //Cellule typedef struct cell{ //les valeurs minimales et maximales du quad en X et en Y float xMin; float yMin; float xMax; float yMax; //Position du point central du quad float xCenter; float yCenter; //Pointeurs struct cell *NW; struct cell *NE; struct cell *SW; struct cell *SE; }t_Cell; typedef t_Cell*t_Quadtree; t_Cell *createCell(float xMin, float yMin, float xMax, float yMax); //Creation du quadtree void createQuadTree(t_Quadtree quadtree); #endif
Mon quadtree est mal conçu mais je n'arrive pas à le corriger.
De plus, j'aurais à parcourir l'arbre pour récupérer les sommets(en évitant les doublons) et pour définir les faces du maillage qu'il faudra mettre dans des tableaux.
Ca permettra de créer le sol
Je voudrai savoir s'il faut que je rajoute des champs à ma structure et comment m'y prendre
#include <stdio.h> #include <stdlib.h> #include "quadtree.h" #include "parsing.h" #include "image.h" t_Cell *createCell(float xMin, float yMin, float xMax, float yMax){ t_Cell * c; c = (t_Cell*)malloc(sizeof(t_Cell)); if(c == NULL){ fprintf(stderr,"erreur allocation\n"); exit(1); } c->xMin = xMin; c->yMin = yMin; c->xMax = xMax; c->yMax = yMax; c->xCenter = (c->xMax - c->xMin)/2; c->yCenter = (c->yMax - c->yMin)/2; c->NW = NULL; c->NE = NULL; c->SW = NULL; c->SE = NULL; return c; } //Creation du quadtree void createQuadTree(t_Quadtree quadtree){ gl_texture_t *image; char *png; double width, height, altitude_max, tolerance; int i, min, max, variations_fortes; //Parsing du fichier de description pour recuperer les infos if(parse("fichier.txt",png,&width,&height,&altitude_max,&tolerance) != 0){ fprintf(stderr,"erreur lors du parsing du fichier \"fichier.txt\"\n"); return ; } //image contient l'image image = ReadPNGFromFile(png); //On ajoute la racine qui contient l'image complete if(quadtree == NULL){ quadtree = createCell(0, (double)image->width, 0, (double)image->height); if(quadtree == NULL){ fprintf(stderr,"erreur lors de la creation d'une cellule\n"); return; } } //min et max contiennent le premier pixel contenu dans le tableau texels min = image->texels[0]; max = image->texels[0]; for(i=1; i<image->width*image->height; i++){ if(min > image->texels[i]) min = image->texels[i]; if(max < image->texels[i]) max = image->texels[i]; } variations_fortes = max-min; if(variations_fortes > tolerance){ quadtree->NE = createCell(quadtree->xMin,quadtree->xCenter,quadtree->yCenter, quadtree->yMax); quadtree->NW = createCell(quadtree->xCenter,quadtree->xMax,quadtree->yCenter, quadtree->yMax); quadtree->SE = createCell(quadtree->xMin,quadtree->xCenter,quadtree->yMin, quadtree->yCenter); quadtree->SW = createCell(quadtree->xCenter,quadtree->xMax,quadtree->yMin, quadtree->yCenter); createQuadTree(quadtree->NE); createQuadTree(quadtree->NW); createQuadTree(quadtree->SE); createQuadTree(quadtree->SE); } }
A voir également:
- [C]Arbre ayant 4 fils
- Code gta 4 ps4 - Guide
- A quoi servent les 8 fils rj45 ✓ - Forum câblage
- Branchement ventilateur pc 4 fils - Forum Matériel & Système
- Control center 4 - Télécharger - Divers Utilitaires
- Clip 4 sales - Forum Réseaux sociaux
2 réponses
Salut.
Je me rappel plus de ce que tu veux faire. Je me souvien que c'etait un peut compliquer.
Décri brievement ce que fait parse().
Tu as deux fois 'quadtree->SE'
Je trouve le if(quadtree==NULL) un peu étrange si celui ci est différents de 0. C normale que tu refasse plusieurs fois la même chose ? create(quadtree->SE) va faire creat(quadtree->NW) : tu tourne en rond, non?
De plus tu n'avance qu'en diagonale, est-ce normale ? tu n'a pas de N S, E O...
Je me rappel plus de ce que tu veux faire. Je me souvien que c'etait un peut compliquer.
Décri brievement ce que fait parse().
Tu as deux fois 'quadtree->SE'
Je trouve le if(quadtree==NULL) un peu étrange si celui ci est différents de 0. C normale que tu refasse plusieurs fois la même chose ? create(quadtree->SE) va faire creat(quadtree->NW) : tu tourne en rond, non?
De plus tu n'avance qu'en diagonale, est-ce normale ? tu n'a pas de N S, E O...
Salut,
Je me rappel plus de ce que tu veux faire. Je me souvien que c'etait un peut compliquer.
Il me faut créer un quadtree à partir d'une image
Décri brievement ce que fait parse().
La fonction parse permet de récupérer des infos contenues dans un fichier.
Dans mon cas, le fichier est fichier.txt et est de cette forme :
Mon fichier prend en parametre :
char *png;
double width, height, altitude_max, tolerance;
int parse(char *filename, char *png, double *width, double *height, double *altitude_max, double *tolerance){
Tu as deux fois 'quadtree->SE'
C'est une erreur de ma part
Je trouve le if(quadtree==NULL) un peu étrange si celui ci est différents de 0. C normale que tu refasse plusieurs fois la même chose ? create(quadtree->SE) va faire creat(quadtree->NW) : tu tourne en rond, non?
De plus tu n'avance qu'en diagonale, est-ce normale ? tu n'a pas de N S, E O...
Si tu pouvais m'indiquer les changements à effectuer
Merci
Je me rappel plus de ce que tu veux faire. Je me souvien que c'etait un peut compliquer.
Il me faut créer un quadtree à partir d'une image
Décri brievement ce que fait parse().
La fonction parse permet de récupérer des infos contenues dans un fichier.
Dans mon cas, le fichier est fichier.txt et est de cette forme :
image.png //image à charger 1000.0 1000.0 //dimension du terrain 240.0 //altitude_maximale du terrain 10.0 //tolérance du quadtree
Mon fichier prend en parametre :
char *png;
double width, height, altitude_max, tolerance;
int parse(char *filename, char *png, double *width, double *height, double *altitude_max, double *tolerance){
Tu as deux fois 'quadtree->SE'
C'est une erreur de ma part
Je trouve le if(quadtree==NULL) un peu étrange si celui ci est différents de 0. C normale que tu refasse plusieurs fois la même chose ? create(quadtree->SE) va faire creat(quadtree->NW) : tu tourne en rond, non?
De plus tu n'avance qu'en diagonale, est-ce normale ? tu n'a pas de N S, E O...
Si tu pouvais m'indiquer les changements à effectuer
Merci