diff --git a/README.md b/README.md index cf8d5fa..1eeaa35 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # fract-ol ![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. -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. @@ -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. 🛠️ 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. + +𝑐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. @@ -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. -📂 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] \ No newline at end of file