This commit is contained in:
Ladebeze66 2025-01-31 22:45:22 +00:00
parent 81dabf31f5
commit afa8840234
5 changed files with 183 additions and 0 deletions

18
.vscode/c_cpp_properties.json vendored Normal file
View File

@ -0,0 +1,18 @@
{
"configurations": [
{
"name": "windows-gcc-x64",
"includePath": [
"${workspaceFolder}/**"
],
"compilerPath": "gcc",
"cStandard": "${default}",
"cppStandard": "${default}",
"intelliSenseMode": "windows-gcc-x64",
"compilerArgs": [
""
]
}
],
"version": 4
}

24
.vscode/launch.json vendored Normal file
View File

@ -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
}
]
}
]
}

59
.vscode/settings.json vendored Normal file
View File

@ -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
}

82
README.md Normal file
View File

@ -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]]

BIN
picture.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 MiB