Nantes Université

Skip to content
Extraits de code Groupes Projets
Valider fea56581 rédigé par Loig JEZEQUEL's avatar Loig JEZEQUEL
Parcourir les fichiers

màj énoncé projet quadtree

parent 40c25b6a
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -495,11 +495,53 @@ Ces fonctions sont utilisées lorsque le champs \inlinecode{FloorKind} du fichie
\paragraph{MakeFromArray.}
Vous trouverez cette fonction dans le fichier \file{make.go} du dossier \file{quadtree}.
Étant donné un tableau représentant un terrain retourné par la fonction \inlinecode{readFromFile} développée précédement, cette fonction doit initialiser un quadtree représentant ce terrain.
Pour cela, le terrain sera découpé en quatre zones rectangles de tailles aussi proches que possible, chacune d'entre elles étant représentée par un nœud de l'arbre (qui est donc lui même un quadtree).
Pour cela, le terrain sera découpé en quatre zones rectangles de tailles aussi proches que possible (figure~\ref{fig:decoupe}), chacune d'entre elles étant représentée par un nœud de l'arbre (qui est donc lui même un quadtree).
Notez bien que ceci invite à utiliser la récursivité.
\begin{figure}[htbp]
\centering
\begin{tikzpicture}
\draw[draw=black] (0, 0) rectangle (5, 4);
\draw[draw=black!25] (1, 0) -- (1, 4);
\draw[draw=black!25] (2, 0) -- (2, 4);
\draw[draw=black!25] (3, 0) -- (3, 4);
\draw[draw=black!25] (4, 0) -- (4, 4);
\draw[draw=black!25] (0, 1) -- (5, 1);
\draw[draw=black!25] (0, 2) -- (5, 2);
\draw[draw=black!25] (0, 3) -- (5, 3);
\draw[draw=black, dashed] (2, -0.5) -- (2, 4.5);
\draw[draw=black, dashed] (-0.5, 2) -- (5.5, 2);
\draw[latex-latex] (0, 5) -- (5, 5);
\node (width) at (2.5, 5.25) {$w$};
\draw[latex-latex] (0, 4.25) -- (2, 4.25);
\node (width) at (1, 4.5) {$w/2$};
\draw[latex-latex] (2, 4.25) -- (5, 4.25);
\node (width) at (3.5, 4.5) {$w-w/2$};
\draw[latex-latex] (-1, 0) -- (-1, 4);
\node[rotate=90](height) at (-1.25, 2) {$h$};
\draw[latex-latex] (-0.25, 0) -- (-0.25, 2);
\node[rotate=90](height) at (-0.5, 1) {$h-h/2$};
\draw[latex-latex] (-0.25, 2) -- (-0.25, 4);
\node[rotate=90](height) at (-0.5, 3) {$h/2$};
\end{tikzpicture}
\caption{Découpage d'un terrain en quatre zones rectangles de tailles aussi proches que possibles.}\label{fig:decoupe}
\end{figure}
Il faudra bien faire attention à ce que chaque nœud de l'arbre contiennent toutes les informations demandées dans la structure de données \inlinecode{node}.
De plus, il faudra s'assurer que, si l'intégralité de la zone de terrain représentée par un nœud de l'arbre est constituée du même type de sol, ce nœud n'ait pas d'enfants : les quadtrees doivent être aussi compactes que possible.
De plus, il faudra s'assurer que, si l'intégralité de la zone de terrain représentée par un nœud de l'arbre est constituée du même type de sol, ce nœud n'ait pas d'enfants : les quadtrees doivent être aussi compactes que possible (on parle de réduction des quadtrees).
Pour vous aider, le fichier \inlinecode{make\_test.go} contient des tests pour vérifier le bon fonctionnement de votre fonction.
Ces tests suggèrent de procéder au développement par étapes~:
\begin{enumerate}
\item coder la fonction \inlinecode{MakeFromArray} dans le cas où le terrain est un carré de côté $2^n$ avec $n$ un entier et sans prendre en compte les réductions (testé par \inlinecode{TestMakeFromArrayPowerOfTwo}),
\item ajouter la prise en compte des terrains qui ne sont pas des carrés de côté $2^n$ (testé par \inlinecode{TestMakeFromArrayAnyRectangle}),
\item ajouter la réduction des quadtrees (testé par \inlinecode{TestMakeFromArrayReduction}).
\end{enumerate}
\paragraph{GetContent.}
Vous trouverez cette fonction dans le fichier \file{get.go} du dossier \file{quadtree}.
......@@ -507,9 +549,16 @@ Cette fonction doit, étant donné un quadtree représentant tout le terrain et
Le tableau \inlinecode{contentHolder} est fourni à la bonne taille, il faut remplir toutes ses cases.
Ce tableau est une copie du tableau \inlinecode{content} utilisé dans la partie précédente, modifier une de ses cases revient donc à modifier une case du tableau \inlinecode{content} (comme nous l'avons vu lors de l'apprentissage du Go).
Encore une fois, des tests vous sont fournis (dans le fichier \inlinecode{get\_test.go}) pour guider votre développement~:
\begin{enumerate}
\item \inlinecode{TestGetContentNoReduction} traite le cas des quadtrees non réduits,
\item \inlinecode{TestGetContentReduction} traite le cas général.
\end{enumerate}
\paragraph{Quelques conseils.}
\begin{itemize}
\item Commencez par travailler sur des terrains carrés dont le côté a un nombre de cases qui est une puissance de 2~: c'est un bon point de départ, plus simple que le cas général.
\item Progressez par petites étapes en suivant les tests, ne faites pas tout d'un coup.
\item Une fois codées l'étape 1 de \inlinecode{MakeFromArray} et l'étape 1 de \inlinecode{GetContent} vous serez en mesure de visualiser vos terrains dans le jeu. Un bon ordre pour le développement pourrait donc être de faire ces deux étapes, tester, puis l'étape 2 de \inlinecode{MakeFromArray}, tester. Enfin, vous pourrez ajouter l'étape 3 de \inlinecode{MakeFromArray} puis l'étape 2 de \inlinecode{GetContent}.
\item N'hésitez pas à utiliser la méthode \inlinecode{GetAsText} du paquet \inlinecode{quadtree} pour visualiser vos quadtrees sous forme textuelle et vérifier s'ils sont corrects.
\end{itemize}
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter