This commit is contained in:
Ladebeze66 2025-02-10 17:19:52 +01:00
parent e2605c278d
commit e0d69e37d4

View File

@ -1,9 +1,9 @@
# fract-ol # fract-ol
![illustration fractol](./picture.png) ![illustration fractol](./picture.png)
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. 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 🎯 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. 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. Compréhension des Nombres Complexes : Utiliser les nombres complexes pour calculer et représenter des ensembles fractals tels que Mandelbrot et Julia.
@ -11,33 +11,47 @@ Compréhension des Nombres Complexes : Utiliser les nombres complexes pour calcu
Optimisation des Performances : Améliorer l'efficacité du rendu graphique, notamment en explorant l'utilisation de threads pour le calcul parallèle. 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 🛠️ Spécifications Techniques
Fractales à Générer : Fractales à Générer :
Ensemble de Mandelbrot : Défini par l'itération de la fonction 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. 𝑧𝑛+1=𝑧𝑛2+𝑐z n+1 =zn2+c, où 𝑧z et 𝑐c sont des nombres complexes.
Ensemble de Julia : Similaire à Mandelbrot, mais avec une constante Ensemble de Julia : Similaire à Mandelbrot, mais avec une constante
𝑐c fixe et des valeurs initiales
𝑧z variant selon les pixels. 𝑐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. 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 : 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. 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. 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. Changement de Palette de Couleurs : Offrir différentes palettes pour améliorer la visualisation des fractales.
Contrôles Utilisateur : Contrôles Utilisateur :
Souris : Zoom avant/arrière avec la molette, déplacement en cliquant et en faisant glisser. 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. 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 🔧 Approche d'Implémentation
Initialisation de MiniLibX : Initialisation de MiniLibX :
Créer une fenêtre et initialiser une image pour le rendu des fractales. Créer une fenêtre et initialiser une image pour le rendu des fractales.
Calcul des Fractales : Calcul des Fractales :
Pour chaque pixel de l'image, convertir les coordonnées en un nombre complexe. Pour chaque pixel de l'image, convertir les coordonnées en un nombre complexe.
Appliquer l'itération de la fonction fractale correspondante. 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é. 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 : 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. 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.
@ -45,34 +59,36 @@ 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. 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 : Bibliothèques :
MiniLibX : Bibliothèque graphique utilisée pour le rendu et la gestion des entrées. 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. pthread : Bibliothèque pour la gestion des threads, si l'optimisation parallèle est implémentée.
🧪 Tests et Validation 🧪 Tests et Validation
Tests Fonctionnels : Tests Fonctionnels :
Vérifier que chaque type de fractale est correctement généré et affiché. 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. Tester les fonctionnalités d'interaction utilisateur, comme le zoom, le déplacement et la modification des paramètres.
Tests de Performance : Tests de Performance :
Évaluer le temps de rendu pour différentes tailles de fenêtre et profondeurs de zoom. É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. Tester l'efficacité des optimisations, notamment l'utilisation de threads pour le calcul parallèle.
Tests de Robustesse : Tests de Robustesse :
Assurer la stabilité du programme lors d'entrées utilisateur rapides ou inattendues. 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. Vérifier la gestion appropriée des erreurs, comme des valeurs de paramètres invalides.
📚 Ressources Utiles 📚 Ressources Utiles
Dépôts GitHub : 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] [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] [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]