|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Étudiant Inscription : décembre 2012 Messages : 7 ![]() |
Bonjour, je dois faire un quadtree comme projet. Lorsque je fais l'inversion verticale et après plusieurs division, rien ne se passe à l'affichage, pourtant les coordonnées sont bien modifiées. Quelqu'un peut il m'aider ou me conseiller. Merci
Code :
|
||
|
|
00
|
|
|
#2 |
|
Membre émérite
![]() Ingénieur Inscription : janvier 2009 Messages : 494 ![]() |
Salut
questions préliminaires indispensables : est-ce que le type ARBRE ou la structure NOEUD ont changé depuis ton dernier message ? La fonction init_arbre a-t-elle été modifiée ou pas ? Et aussi (j'avais déja posé la question), dois-tu développer dans le cadre du projet un "gestionnaire" de Quadtree général et l'appliquer à ton découpage ou dois-tu seulement t'inspirer des Quadtree pour effectuer tes découpages ? |
|
|
00
|
|
|
#3 |
|
Membre émérite
![]() Ingénieur Inscription : janvier 2009 Messages : 494 ![]() |
les définitions de certains types ont été données dans cette discussion
j'ai bien l'impression qu'il y a, de toute façon, un problème dans ta façon de procéder. C'est dû au fait que les coordonnées extrêmes (xmin,ymin,xmax,ymax) des zones couvertes par les noeuds de l'arbre sont fixées lors de leur création ou de la division du noeud père (ce sont les coordonnées des points P1 et P2). Ces coordonnées sont des coordonnées absolues mais, à la création, elles sont cohérentes : avant les "inversions", les fils sont spatialement localisés dans le père. Quand tu commences à faire les inversions, c'est là que ça part en vrille : tu swappes les deux couples de fils (les gauches haut et bas, les droits haut et bas) qui, globalement, restent dans le père. Sauf qu'à l'étape suivante (attention, c'est du récursif et les changements se font en remontant dans l'arbre), le père change de place avec "un frère". Au final (sauf quelques cas particuliers, profondeur de 1), les noeuds pères ne contiennent pas, spatialement, leurs noeuds fils ... pour un Quadtree qui, dans ton cas, doit partitionner l'espace, ça coince. Visuellement, sur un exemple minimaliste où on reconnaitra chacun des noeuds par une couleur de périmètre : ![]() figure 1 : c'est la position de départ. La racine (noir) a été divisée et a 4 fils (jaune, gris, vert, rouge). Seul le fils jaune a été divisé (rose, bleu, violet et marron) Première inversion sur f1 (jaune) qui (réursivité) lance les inversions sur les fils (feuilles de l'arbre : il ne se passe rien). Changement des coordonnées des dits-fils f1 et f3 (résultat figure 2 / inversion rose-violet) et f2 et f4 (résultat figure 3 - inversion bleu-marron). L'inversion des fils de la racine f2 (gris), f3 (vert) et f4 (rouge) s'arrêtent de suite (ce sont des feuilles de l'arbre). Vient alors le changement de coordonnées de f1 (jaune) et f3 (vert) : résultat à la figure 4 : cà y est ! Le noeud père JAUNE référence toujours (champs f1,f2,f3 et f4) ses fils violet, marron, rose et bleu mais ne les contient même plus. Denier changement entre f2 et f4 de la racine : inversion gris-rouge et résultat final donné à la figure 5. Et quand les divisions des noeuds sont plus poussées, ça part, encore un peu plus, dans tous les sens. |
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() Étudiant Inscription : décembre 2012 Messages : 7 ![]() |
J'ai réussi à faire l'inversion finalement, en recalculant les coordonnées pour chaque nœuds et en échangeant les fils en mémoire. Merci .
|
|
|
00
|
|
|
#5 |
|
Membre émérite
![]() Ingénieur Inscription : janvier 2009 Messages : 494 ![]() |
A moins que ce ne soit qu'une simple contrainte dans ton projet (une "figure imposée"), pourrais-tu m'éclairer sur l'intérêt de cette inversion ? Je ne vois pas du tout à quoi ça peut servir.
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com