Le but de ce projet est d'avoir un programme qui nous permette de réaliser des belles images de fractales, principalement le Mandelbrot, ses variantes et d'autres figures géometriques similiaires, uniquement en 2D. On utilisera le langage C++, tout en implementant differentes optimisations.
On se place dans un plan complexe, avec en abcsisse les nombres réels et en ordonées les nombres complexes. L'ensemble de Mndelbrot dans un tel plan est défini par tous les points
avec
Le resultat obtenu est une fractale.
Le but de ce projet est de concevoir un programme pour réaliser cette fractale (dans un premier temps). Il est possible de modifier les differentes couleurs, mais une attention particulière sera porté à la performance du code. En effet, dans une approche naîve du problème, le calcul des points
Le fichier Documentation.pdf explore certaines pistes pour optimiser le calcul de l'ensemble de Mandelbrot et d'autres manières d'appréhender le problème.
Ainsi nous implementerons plusieures versions (succesives), avec differentes approches/optimisations.
Le prgramme produit en sortie des images en format Portable Network Graphics (PNG). Des formats facilitant l'implémentation existent, mais ici nous avons fait le choix d'un format plus portable.
- Le dossier data contient differents jeux de données (resultats de tests de performance, ...)
- Le dossier doc contient la documentation expliquant plus en détail certains points du projet ...
- Le dossier images est le répertoire de sortie de la production d'images du programme
- Le dossier src contient les fichiers source du programme.
- Version minimale de CMake: 3.28 (vérifier avec la commande
cmake --version) - Le projet nécessite l'installation des libraries libpng (librarie de manipulation de png pour C/C++) et zlib (librairie de compression utilsé par le format png). Sans quoi le programme ne compilera pas.
- Pour verifier leur présence:
dpkg -l | grep zlib1g-dev dpkg -l | grep libpng-dev
- Pour les installer en cas d'abscence de resultat des commandes precdentes:
sudo apt-get install zlib1g-dev sudo apt-get install libpng-dev
- Il est recomandé d'utilser le compilateur GNU, sinon il faudra modifier les options de compilation en fonction du compilateur choisi dans le fichier CMakeLists.txt.
Après avoir installé (téléchargé) le projet sur sa machine (via git, ou autre moyen), ouvrir le terminal. La première étape consiste à créer un dossier où seront entreposés les executables (et autres fichiers). Mais au lieu de créer un seul dossier, nous allons en faire 2, un pour le mode DEBUG (pour vérifier que tout marche bien) et un autre pour le mode RELEASE (version production).
Pour le mode DEBUG, créer un dossier build-debug au sein du dossier HP_Mandelbrot et se placer dedans.
mkdir build-debug
cd build-debugEnsuite on tape la commande suivante pour construire le projet:
cmake -DCMAKE_BUILD_TYPE=Debug ..Pour le mode RELEASE, créer un dossier build-release au sein du dossier HP_Mandelbrot et se placer dedans.
mkdir build-release
cd build-releaseEnsuite on tape la commande suivante pour construire le projet:
cmake -DCMAKE_BUILD_TYPE=Release ..Les étapes suivantes sont les mêmes pour les deux modes.
Pour compiler le projet:
cmake --build .(Si on veut voir le temps d'execution du programme et se rassurer que tout se passe bien)
ctestPour executer le programme on execute la commande :
./Main.exe[Si on est pas sur un Système Windows (ou WSL) il faudra changer le nom de l'executable dans la fonction add_executable() dans le fichier CMakeLists.txt]
Pour nettoyer le dossier build (correctement, que ce soit build-debug ou build-release) faire:
cd build
cmake --build . --target my_clean && cd ../Pour modifier la disposition des couleurs (le plus important) il faut se rendre dans le fichier Color.cpp.
L'idéal serait d'imiter l'approche utilsé par l'une des fonctions présente dans ce fichier. Il faudrait alors inclure le nom de la fonction crée où modifiée en tant que dernier argument, dans l'appel de la fonction color_mandel() dans le fichier MandelBrot.cpp.
L'utilisation de l'IA n'a été faite qu'une seule fois. Et son usage se resume dans le code du fichier source exemple_png_mistral_ia.cpp, qui m'a facilité l'écriture de la fonction permettant de creer une image au format PNG.
L’utilisation des contenus de ce site à des fins de data mining, scraping ou d’entraînement d’IA est strictement interdite.
