2012-2013/TD_maple/Feu_foret/feu_foret.tex

74 lines
4.1 KiB
TeX

\documentclass[10pt,a4paper]{article}
\usepackage{/media/documents/Cours/Prof/TD_maple/2012_2013/style}
\title{Automates cellulaires: feu de forêt}
\author{}
\date{}
\begin{document}
\maketitle
\thispagestyle{fancy}
\section{Description de l'automate}
Nous allons programmer un automate cellulaire qui simule la propagation d'un feu de forêt. La forêt sera représentée par une grille avec dans les cases rien, des arbres, du feu ou des cendres. La propagation du feu de forêt se fera de la manière suivante:
\begin{itemize}
\item Une case avec rien reste comme elle est.
\item Une case avec un arbre devient en feu si une case adjacente est en feu.
\item Une case en feu devient une case cendre.
\item Une case cendre devient une case vide.
\end{itemize}
On construira la forêt initiale aléatoirement. Avec, pour chaque case, une probabilité $p$ d'être un arbre et une probabilité $1-p$ d'être vide.
Le but de ce TD est de programmer cet automate et d'avoir une animation affichant la propagation du feu de forêt.
\section{Programmation de l'automate}
Les étapes proposées dans la suite sont données à titre indicatif. Vous n'êtes pas obligé de les faire dans l'ordre ni même de les suivre si vous avez de meilleurs idées.
\subsection{Moteur du jeu}
\begin{itemize}
\item \textbf{Stockage des données:} Comment va-t-on stocker l'état de la forêt?
\item \textbf{Trame principale:} Écrire le programme principal \texttt{feuForet} prenant en argument \texttt{p} la probabilité d'être une case arbre initialement et affichant l'animation du feu de forêt. Ce programme devra juste décrire la trame et fera appel à d'autres fonctions que nous écrirons ensuite.
\end{itemize}
\subsection{Forêt initiale}
\begin{itemize}
\item \textbf{Forêt initiale:} Écrire un programme \texttt{foretIni} prenant en argument \texttt{p} et créant la forêt initiale.
\item \textbf{Mettre le feu:} Écrire un programme \texttt{FeuIni} mettant le feu à une case.
\end{itemize}
\subsection{Propagation du feu}
\begin{itemize}
\item Écrire un programme \texttt{propaFeu} prenant en argument \texttt{feu} l'état de la forêt et renvoyant l'état de la forêt à l'étape suivante.
\end{itemize}
\subsection{Affichage et animation}
\begin{itemize}
\item \textbf{Afficher une cellule:} Écrire une procédure \texttt{dessCel} prenant en argument la position de la cellule \texttt{l}, \texttt{c}, la taille de la forêt \texttt{n} (on pourra supposer que la forêt est carré) et la couleur de la cellule et renvoyant cette cellule.
On rappel que pour dessiner un polygone, on utilise \texttt{polygon} (il faut avoir chargé les bibliothèques \texttt{plots}, \texttt{geometry} et \texttt{plottools}).
\item \textbf{Dessiner un forêt:} Écrire une procédure \texttt{dessForet} prenant en argument l'état de la forêt et renvoyant l'image représentant la forêt.
On rappel que pour mettre plusieurs éléments sur une même image, on les stocks dans un ensemble puis on utilise \texttt{display} (on pourra utiliser les options suivantes pour avoir un meilleur rendu \texttt{scaling=constrained,axes=none}).
\item \textbf{Animer le feu:} Écrire une procédure \texttt{anime} prenant en argument la liste des états de la forêts et renvoyant l'animation du feu de forêt.
\end{itemize}
\section{Modifier l'automate}
Voici quelques idées pour modifier votre automate.
\begin{itemize}
\item Rendre la forêt ``périodique''. C'est à dire que les cases de droites sont adjacentes à celles de gauches et que celle d'en haut sont adjacentes à celle du bas.
\item Faire en sorte que le feu puisse se propager non seulement sur les cases adjacentes mais aussi sur celles aux angles.
\item Modifier les règles de l'automate pour simuler le jeu de la vie.
Le jeu de la vie est un automate cellulaire avec deux états: mort ou vivant. Voici les règles de son évolution:
\begin{itemize}
\item Une cellule morte possédant exactement trois voisines vivantes devient vivante (elle naît).
\item Une cellule vivante possédant deux ou trois voisines vivantes le reste, sinon elle meurt.
\end{itemize}
\end{itemize}
\end{document}