diff --git a/main.c b/main.c index 682a15d97cef8bdd71199df4276e528cb4776780..dad4f0b1cca1115d4ed61672d7b033ed5a764ad2 100644 --- a/main.c +++ b/main.c @@ -30,6 +30,7 @@ int main() // matrix_alloc(&mat,p->pixels.lin,p->pixels.col); // matrix_init(&mat); + quadtree_central_symetry(tree); quadtree_tree2matrix(tree,&pp->pixels); // // matrix_print(mat); @@ -42,7 +43,7 @@ int main() matrix_destroy(&p->pixels); matrix_destroy(&pp->pixels); - quadtree_tree_destroy_clean(&tree); + quadtree_tree_destroy(&tree); free(p); free(pp); return 0; diff --git a/quadtree.c b/quadtree.c index 61bd55ddb269c601a7265161387153f476d39fe9..2246883624df0d8754b294ba509f979fb3af49a7 100644 --- a/quadtree.c +++ b/quadtree.c @@ -104,9 +104,9 @@ node *quadtree_position(int32_t li, int32_t col, node *a, int32_t d) node *crt = a; do { - int32_t ligne = (li>>d) & 1; // Permet de sélectionne le bit à considérer en fonction de la profondeur; Exemple: 10 >> 1 = 1 - int32_t colonne = (col>>d) & 1; //Exemple: 10 >> 1 = 1; - int32_t index = (ligne<<1) | colonne; // Exemple: 1<<1 = 10 | 1(col) = 11=>3 + int32_t ligne = (li >> d) & 1; // Permet de sélectionne le bit à considérer en fonction de la profondeur; Exemple: 10 >> 1 = 1 + int32_t colonne = (col >> d) & 1; //Exemple: 10 >> 1 = 1; + int32_t index = (ligne << 1) | colonne; // Exemple: 1<<1 = 10 | 1(col) = 11=>3 crt = crt->child[index]; d--; @@ -119,9 +119,9 @@ double quadtree_position_value(int32_t li, int32_t col, node *a, int32_t d) node *crt = a; do { - int32_t ligne = (li>>d) & 1; // Permet de sélectionne le bit à considérer en fonction de la profondeur; Exemple: 10 >> 1 = 1 - int32_t colonne = (col>>d) & 1; //Exemple: 10 >> 1 = 1; - int32_t index = (ligne<<1) | colonne; // Exemple: 1<<1 = 10 | 1(col) = 11=>3 + int32_t ligne = (li >> d) & 1; // Permet de sélectionne le bit à considérer en fonction de la profondeur; Exemple: 10 >> 1 = 1 + int32_t colonne = (col >> d) & 1; //Exemple: 10 >> 1 = 1; + int32_t index = (ligne << 1) | colonne; // Exemple: 1<<1 = 10 | 1(col) = 11=>3 crt = crt->child[index]; d--; @@ -154,45 +154,50 @@ void quadtree_tree2matrix(node *tree, matrix *mat) } } -void quadtree_vertical_symetry(node *tree) -{ - // Inversé les colones -} - +// OK void quadtree_horizontal_symetry(node *tree) { + if (NULL != tree) + { + for (uint32_t i = 0; i < CHILDREN; i += 1) + { + quadtree_horizontal_symetry(tree->child[i]); + } + quadtree_swap((void**)&tree->child[0], (void**)&tree->child[1]); + quadtree_swap((void**)&tree->child[2], (void**)&tree->child[3]); + } } -void quadtree_central_symetry(node *tree) -{ -} - -void quadtree_tree_destroy(node **tree) +// OK +void quadtree_vertical_symetry(node *tree) { - node *a = *tree; - if (a->child[0] == NULL) - { - free(a); - } - else + if (NULL != tree) { for (uint32_t i = 0; i < CHILDREN; i += 1) { - quadtree_tree_destroy(&a->child[i]); + quadtree_vertical_symetry(tree->child[i]); } + quadtree_swap((void**)&tree->child[0], (void**)&tree->child[2]); + quadtree_swap((void**)&tree->child[1], (void**)&tree->child[3]); } } -void quadtree_tree_destroy_clean(node **tree) +void quadtree_central_symetry(node *tree) +{ + quadtree_vertical_symetry(tree); + quadtree_horizontal_symetry(tree); +} + +void quadtree_tree_destroy(node **tree) { - if(NULL != *tree) + if (NULL != *tree) { - if(!quadtree_is_leaf(*tree)) + if (!quadtree_is_leaf(*tree)) { - for (uint32_t i = 0; i < CHILDREN; i+=1) + for (uint32_t i = 0; i < CHILDREN; i += 1) { - quadtree_tree_destroy_clean(&(*tree)->child[i]); - } + quadtree_tree_destroy(&(*tree)->child[i]); + } } else { diff --git a/quadtree.h b/quadtree.h index 96910805d9458262adf20665df23b60c7e7de1b5..22d3fa953c1049e1844da564d5797fbd88ca7bc5 100644 --- a/quadtree.h +++ b/quadtree.h @@ -41,4 +41,12 @@ void quadtree_tree_destroy(node **tree); void quadtree_tree2matrix(node *tree,matrix* mat); -void quadtree_tree_destroy_clean(node **tree); \ No newline at end of file +void quadtree_tree_destroy_clean(node **tree); + +double quadtree_position_value(int32_t li, int32_t col, node *a, int32_t d); + +void quadtree_horizontal_symetry(node *tree); + +void quadtree_vertical_symetry(node *tree); + +void quadtree_central_symetry(node *tree); \ No newline at end of file