Le code est donné ci-joint. La bibliothèque TFT_eSPI définit les connexions dans un fichier setup (joint) qui doit être dans le répertoire de la bibliothèque. Il est possible de faire des setups spécifiques à un programme, je m'y attacherai plus tard.
Le code commence par afficher le mode d'emploi :
La majeure partie de l'écran est réservée à l'affichage des images, des boutons tactiles sont disponibles à droite de l'écran :
- R : effectue un 'reset', c'est à dire remet l'image à son échelle maximale
- U : 'undo' permet de revenir à l'étape précédente (en cas de zoom pas intéressant)
- M ou J : permet de passer de l'ensemble de Mandelbrot à l'ensemble de Julia et réciproquement.
Il faut rentrer un peu dans les détails de la manière de calculer ces ensembles. Ces ensembles sont calculés par l'itération répétée d'une formule simple, dans notre cas z^n+c. z est un nombre complexe qui représente les coordonnées d'un point de l'affichage. n est un exposant entier (ici il peut varier de 2 à 7) et c est une constante.
Pour l'ensemble de Mandelbrot, pour tous les points de la zone d'affichage on commence par initialiser z à 0. La constante c est prise égale à la valeur des coordonnées du point considéré et on itère la formule.
Un point fait partie de l'ensemble si l'application répétée de cette formule ne diverge pas (c'est à dire n'entraîne pas les calculs vers des grands nombres). Il est démontré que si le résultat de la formule dépasse 2 (en module puisqu'on parle de nombres complexes) l'itération va diverger. Donc pour obtenir des jolies couleurs, on stoppe l'itération au moment où le résultat dépasse 2 et la couleur correspond au numéro de l'itération. Si le nombre d'itérations est trop grand (donc si le point fait partie de l'ensemble de Mandelbrot) on arrête à partir d'un seuil (Iter_max) et on associe la couleur noire à ce point.
L'ensemble de Julia est calculé de manière similaire à la différence près que l'on n'initialise pas les calculs à 0 mais à la valeur des coordonnées du point considéré et que la constante c est choisie par l'utilisateur pour l'ensemble de l'image.
Voila, j'espère que c'est clair. Ces explications permettent de mieux comprendre la suite du mode d'emploi :
Les libellés de certaines touches changent en fonction du contexte : elles affichent la fonction qui sera exécutée si on appuie dessus. Ainsi si on affiche l'ensemble de Mandelbrot, la touche M/J affiche J puisque si on appuie dessus on affichera l'ensemble de Julia (et réciproquement).
Même chose pour le choix de la palette de couleurs. On commence par la palette verte. La touche propose la palette suivante (la bleue). Les palettes sont : rouge, vert, bleu, gris, palette 1, palette 2 et on revient au rouge. Les deux dernières sont des essais de palettes multicolores, peu concluants mais ça change un peu et ça permet de voir mieux certains détails.
La touche avec un nombre permet de choisir l'exposant n, en boucle de 2 à 7. Dans le même esprit, elle affiche 3 si vous êtes à 2...
Enfin, lors de l'affichage de l'ensemble de Julia, il faut choisir la valeur de la constante c : la touche C permet de le faire, grâce à un sélecteur :
EDIT : j'ai oublié de préciser le principal. Cliquer sur l'image permet de zoomer autour du point sélectionné.
Mandel_ESP32_touch2.ino (9.56 KB)
User_Setup.h (11.1 KB)