diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..cea4d3f --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,18 @@ +{ + "configurations": [ + { + "name": "windows-gcc-x64", + "includePath": [ + "${workspaceFolder}/**" + ], + "compilerPath": "gcc", + "cStandard": "${default}", + "cppStandard": "${default}", + "intelliSenseMode": "windows-gcc-x64", + "compilerArgs": [ + "" + ] + } + ], + "version": 4 +} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..e0bb458 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,24 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "C/C++ Runner: Debug Session", + "type": "cppdbg", + "request": "launch", + "args": [], + "stopAtEntry": false, + "externalConsole": true, + "cwd": "e:/42school/projects/fractol", + "program": "e:/42school/projects/fractol/build/Debug/outDebug", + "MIMode": "gdb", + "miDebuggerPath": "gdb", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + } + ] + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..bb879da --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,59 @@ +{ + "C_Cpp_Runner.cCompilerPath": "gcc", + "C_Cpp_Runner.cppCompilerPath": "g++", + "C_Cpp_Runner.debuggerPath": "gdb", + "C_Cpp_Runner.cStandard": "", + "C_Cpp_Runner.cppStandard": "", + "C_Cpp_Runner.msvcBatchPath": "C:/Program Files/Microsoft Visual Studio/VR_NR/Community/VC/Auxiliary/Build/vcvarsall.bat", + "C_Cpp_Runner.useMsvc": false, + "C_Cpp_Runner.warnings": [ + "-Wall", + "-Wextra", + "-Wpedantic", + "-Wshadow", + "-Wformat=2", + "-Wcast-align", + "-Wconversion", + "-Wsign-conversion", + "-Wnull-dereference" + ], + "C_Cpp_Runner.msvcWarnings": [ + "/W4", + "/permissive-", + "/w14242", + "/w14287", + "/w14296", + "/w14311", + "/w14826", + "/w44062", + "/w44242", + "/w14905", + "/w14906", + "/w14263", + "/w44265", + "/w14928" + ], + "C_Cpp_Runner.enableWarnings": true, + "C_Cpp_Runner.warningsAsError": false, + "C_Cpp_Runner.compilerArgs": [], + "C_Cpp_Runner.linkerArgs": [], + "C_Cpp_Runner.includePaths": [], + "C_Cpp_Runner.includeSearch": [ + "*", + "**/*" + ], + "C_Cpp_Runner.excludeSearch": [ + "**/build", + "**/build/**", + "**/.*", + "**/.*/**", + "**/.vscode", + "**/.vscode/**" + ], + "C_Cpp_Runner.useAddressSanitizer": false, + "C_Cpp_Runner.useUndefinedSanitizer": false, + "C_Cpp_Runner.useLeakSanitizer": false, + "C_Cpp_Runner.showCompilationTime": false, + "C_Cpp_Runner.useLinkTimeOptimization": false, + "C_Cpp_Runner.msvcSecureNoWarnings": false +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..06ff105 --- /dev/null +++ b/README.md @@ -0,0 +1,82 @@ +# fract-ol +![illustration fractol](./picture) +Le projet fract-ol de l'École 42 est l'un des premiers projets graphiques du cursus, conçu pour initier les étudiants à la programmation 2D en générant des fractales. Une fractale est une figure géométrique fragmentée qui se répète infiniment à différentes échelles. Ce projet utilise la bibliothèque graphique MiniLibX fournie par l'école. +GITHUB.COM + +🎯 Objectifs du Projet +Manipulation d'une Bibliothèque Graphique Bas-Niveau : Apprendre à utiliser MiniLibX pour créer des fenêtres, gérer les événements clavier et souris, et dessiner des images. + +Compréhension des Nombres Complexes : Utiliser les nombres complexes pour calculer et représenter des ensembles fractals tels que Mandelbrot et Julia. + +Optimisation des Performances : Améliorer l'efficacité du rendu graphique, notamment en explorant l'utilisation de threads pour le calcul parallèle. + +🛠️ Spécifications Techniques +Fractales à Générer : + +Ensemble de Mandelbrot : Défini par l'itération de la fonction +𝑧𝑛+1=𝑧𝑛2+𝑐z n+1 =zn2+c, où 𝑧z et 𝑐c sont des nombres complexes. +Ensemble de Julia : Similaire à Mandelbrot, mais avec une constante +𝑐c fixe et des valeurs initiales +𝑧z variant selon les pixels. +Ensemble Burning Ship : Variante de Mandelbrot utilisant la valeur absolue des parties réelle et imaginaire de 𝑧z à chaque itération. +Fonctionnalités du Programme : + +Zoom et Déplacement : Permettre à l'utilisateur de zoomer et de se déplacer dans la fractale pour explorer différents niveaux de détail. +Modification des Paramètres : Changer dynamiquement les paramètres de la fractale, comme les constantes complexes pour l'ensemble de Julia. +Changement de Palette de Couleurs : Offrir différentes palettes pour améliorer la visualisation des fractales. +Contrôles Utilisateur : + +Souris : Zoom avant/arrière avec la molette, déplacement en cliquant et en faisant glisser. +Clavier : Touches pour déplacer la vue, ajuster le niveau de zoom, modifier les paramètres de la fractale et changer les couleurs. + +🔧 Approche d'Implémentation +Initialisation de MiniLibX : + +Créer une fenêtre et initialiser une image pour le rendu des fractales. +Calcul des Fractales : + +Pour chaque pixel de l'image, convertir les coordonnées en un nombre complexe. +Appliquer l'itération de la fonction fractale correspondante. +Déterminer la couleur du pixel en fonction du nombre d'itérations avant que la valeur ne diverge au-delà d'un seuil fixé. +Gestion des Entrées Utilisateur : + +Implémenter des gestionnaires d'événements pour les entrées clavier et souris afin de permettre l'interaction en temps réel avec la fractale. +Optimisation : + +Utiliser des techniques telles que le calcul en parallèle avec des threads pour améliorer la performance du rendu, surtout lors de zooms profonds nécessitant plus d'itérations. + +📂 Structure du Projet +Fichiers Principaux : + +main.c : Point d'entrée du programme, gère l'initialisation et la boucle principale. +fractals.c : Contient les fonctions de calcul pour chaque type de fractale. +events.c : Gère les entrées utilisateur et les événements. +utils.c : Fonctions utilitaires pour les calculs complexes et autres opérations. +Bibliothèques : + +MiniLibX : Bibliothèque graphique utilisée pour le rendu et la gestion des entrées. +pthread : Bibliothèque pour la gestion des threads, si l'optimisation parallèle est implémentée. + +🧪 Tests et Validation +Tests Fonctionnels : + +Vérifier que chaque type de fractale est correctement généré et affiché. +Tester les fonctionnalités d'interaction utilisateur, comme le zoom, le déplacement et la modification des paramètres. +Tests de Performance : + +Évaluer le temps de rendu pour différentes tailles de fenêtre et profondeurs de zoom. +Tester l'efficacité des optimisations, notamment l'utilisation de threads pour le calcul parallèle. +Tests de Robustesse : + +Assurer la stabilité du programme lors d'entrées utilisateur rapides ou inattendues. +Vérifier la gestion appropriée des erreurs, comme des valeurs de paramètres invalides. + +📚 Ressources Utiles +Dépôts GitHub : + +[leogaudin/fract-ol : Implémentation détaillée du projet avec des explications sur les fractales et l'utilisation de MiniLibX.][https://github.com/leogaudin/fract-ol] +[mcombeau/fract-ol : Un autre exemple d'implémentation, incluant des captures d'écran et des instructions d'utilisation.][https://github.com/mcombeau/fract-ol] + +Articles et Tutoriels : + +[fract-ol: creating graphically beautiful fractals][[fract-ol: creating graphically beautiful fractals]] \ No newline at end of file diff --git a/picture.png b/picture.png new file mode 100644 index 0000000..220010c Binary files /dev/null and b/picture.png differ