MandelTour est un programme d'exploration des ensembles de Mandelbrot et de Julia. Il s'agit d'objets mathématiques affreusement compliqués, mais qui sont une mine d'images toutes plus fascinantes les unes que les autres. Le but de ce programme est de vous aider à trouver ces images le plus confortablement possible, sans vous soucier des mathématiques sous-jacentes. Vous trouverez à la fin de cette introduction quelques indications sur les recettes numéri- ques mises en oeuvre et une bibliographie sommaire. L'ensemble de Mandelbrot proprement dit est la partie en noir dans l'image ci-dessus, mais le plus intéressant est la structure colorée qui l'entoure. L'image peut s'interprêter en imaginant que l'on a découpé l'ensemble dans une plaque métallique et que l'on chauffe cette plaque. La température monte tout autour et on peut visualiser cette montée par une thermographie, c'est à dire qu'on donne une couleur aux points dont la température est dans une plage donnée, une autre couleur pour les points dans une autre plage, etc... En gros, la température va d'autant plus monter que l'on sera plus prés du bord de la plaque et c'est là le point crucial : le bord de l'ensemble de Mandelbrot est fantastiquement compliqué. L'image précédente n'en donne qu'une idée trés faible. On y voit bien des disques de toutes taille et on veut bien admettre qu'il y en a d'autres encore plus petits, que la résolution insuffisante de l'image ne permet pas de voir. Mais il y a bien plus. L'ensemble se prolonge par une véritable chevelure de lignes imperceptibles, qui relient l'ensemble principal à des myriades de répliques miniatures de cet ensemble. Ces lignes sont invisibles (de vraies lignes mathématiques, 1 point de large!) mais leur présence fait monter la température avoisinante, et on "voit" cette montée se traduire par des structures fantastiques. Mais pour voir tout cela, il faut regarder de très près la frontière de l'ensemble; il faut un microscope. Notre programme fournit précisément ce microscope. Le principe du programme est très simple : on désigne une partie de l'ensemble, on l'agrandit aux dimensions de l'écran et... on recommence. Les images intermédiaires sont sauvegardées et constituent une grande librairie graphique (qui peut s'étendre sur de nombreuses disquettes) dont le catalogue est tenu à jour par le programme. Cette approche permet d'aller et venir dans l'ensemble à travers les images en librairie par l'intermédiaire de deux fonctions "Zoom". Quand on a chargé une image, la fonction "Zoom avant" commence par tracer les contours de toutes les images en librairie à l'échelle de l'image sur l'écran, comme indiqué ci-contre. On désigne alors l'image à rappeler en retraçant son contour. Inversement, la fonction "Zoom arrière" ira chercher dans la librairie la plus petite des images contenant l'image du moment à l'écran, tout cela automatiquement; si nécessaire, le programme demandera la disquette nécessaire pour charger l'image souhaitée. Cette méthode permet ainsi de retrouver très simplement ce qui a été fait et ce qui reste à faire dans l'exploration de l'ensemble. En fait, une telle méthode pour naviguer dans l'ensemble est tout simplement indispensable. Notre microscope est extrêmement puissant: vous pourrez agrandir l'ensemble plus de 10^15 fois ! En partant des dimensions de l'écran, vous arriveriez ainsi à des dimensions largement supérieures à la taille du système solaire... Il serait aisé de s'y perdre. Le catalogue de cette librairie graphique, qui contient toutes les informa- tions permettant de localiser les images, est le coeur de notre méthode de navigation. Ce catalogue est tenu dans un fichier spécial, le fichier "Biblio", qui sera mis à jour chaque fois qu'une nouvelle image est calculée et sauvegardée. Ce fichier catalogue va aussi contenir les informations graphiques sur les autres types d'images fournies par le programme, à savoir les images d'ensembles de Julia ou de "Mandelbrot incomplet". Expliquer à un non-mathématicien ce qu'est un ensemble de Julia est tout aussi difficile - pour ne pas dire impossible - que de lui expliquer ce qu'est l'ensemble de Mandelbrot. Nous en resterons à un niveau purement descriptif. Tout d'abord, s'il y a un seul et unique ensemble de Mandelbrot, il y a une infinité d'ensembles de Julia. Chacun d'entre eux peut être agrandi, conduisant à des images rappelant souvent les détails de l'ensemble de Mandelbrot, mais présentant aussi des originalités. Il y a une forte parenté entre les deux types d'ensemble. En fait, chaque Julia est défini par un point source à prendre dans l'ensemble de Mandelbrot. La figure ci-dessus montre trois points sources et les Julia correspondants. ]]90Les figures obtenues sont d'autant plus complexes et plus intéressantes (et ]]90aussi plus difficiles à calculer) que le point source est plus près de la ]]90frontière de l'ensemble de Mandelbrot. ]10Quand le point source s'enfonce à l'intérieur de l'ensemble, on obtient une sorte de patate noire irrégulière pas très passionante, et quand le point source s'en écarte, la structure colorée s'évanouit peu à peu. Dans "MandelTour", la navigation dans les ensembles de Julia se fait sur deux écrans. Un écran "Mandelbrot" montre soit la totalité de l'ensemble, soit l'un de ses agrandissements, avec les points sources visibles sur cette image. L'autre écran est l'écran Julia. Pour charger une image Julia sur disquette, on passe sur l'écran Mandelbrot et on pointe l'un des points sources affichés. Pour calculer une nouvelle image Julia, il suffit de pointer un nouveau point source. On peut aussi naviguer dans l'image Julia elle-même, avec des zooms avant et arrière. Tout se fait automatiquement au moyen de la souris et des informations contenues dans le fichier "Biblio". Les ensembles de Mandelbrot "incomplets" sont obtenus par une variante très simple du calcul classique de l'ensemble de Mandelbrot. Ils sont eux aussi définis par un point source qu'on choisira dans l'ensemble de Mandelbrot, mais ce sera une simple commodité d'écriture; il n'y a aucune relation parti- culière entre le point source et l'ensemble de Mandelbrot. Le programme offre 5 variétés d'ensembles incomplets, baptisées "Mandel incomplet-1" à "Mandel incomplet-5". Vous voyez ci-dessus trois points sources et les ensembles "incomplets-1" correspondants; la dénomination d'ensemble "incomplet" est ici très claire: on dirait que l'ensemble principal a été amputé plus ou moins sévèrement, pour le plus grand plaisir des mathématiciens sadiques. Ces ensembles incomplets s'agrandissent, et on peut naviguer par zooms avant ou arrière, ou changer de point source, tout comme pour les Julia. Le programme fonctionnera donc sur trois modes différents: "Mandelbrot" (pur), "Julia" et "Mandelbrot incomplet". Le programme démarre toujours en mode "Mandelbrot" pur. Pour faire des images d'un autre type, il faudra donc commencer par changer de mode, au moyen du menu approprié. Le programme rappelle constamment dans quel mode on opère, après chaque lecture du menu ou après chaque click de la souris. Sans prétendre entrer dans l'intimité des calculs effectués par le pro- gramme, il vaut mieux avoir une petite idée sur ce qui se passe quand on calcule une image. Une image numérique se compose de points, les "pixels", 320 x 256 si vous travaillez en basse résolution ordinaire ou davantage si vous êtes en overscan ou en haute résolution. Le programme calcule un nombre N pour chacun de ces points - la "température" dont nous parlions tout au début. Après chaque point, le programme allume le pixel correspondant dans une couleur provisoire et ]stocke le nombre N correspondant dans un fichier temporaire, ]90le fichier "iter". Ce fichier est relu à la fin du calcul, et le programme va découper l'inter- valle couvert par les nombres N en autant de tranches qu'il y a de couleurs disponibles, en faisant de son mieux pour que chaque tranche corresponde au même nombre de pixels sur l'écran, afin d'égaliser au mieux l'importance relative des diverses couleurs. Les pixels reçoivent alors leurs couleurs ]définitives. On obtient ainsi la ]90coloration de base. ]10On verra plus tard que cette coloration peut être remaniée au moyen des fonctions de "recoloration". Toutes ces fonctions reposent sur l'interprétation des informations stockées dans le fichier "iter", qui est donc le fichier fondamental pour la coloration des images. Ne confondez pas cette "coloration", c'est à dire la traduction en couleurs des résultats du calcul et le choix de ces couleurs.Celui-ci peut s'obtenir à tout moment au moyen d'une fonction "palette" traditionnelle. Pour aller le plus vite possible, le programme essaie d'ouvrir le fichier "iter" en ram. Bien entendu, si vous n'avez pas assez de mémoire ou si vous faites tourner trop de choses en même temps sur votre Amiga, cela peut ne pas être possible. Dans ce cas, le programme vous proposera d'ouvrir ce fichier sur une disquette, ou sur un disque dur si vous en avez un. Encore un effort pour les non-mathématiciens! Il convient de maitriser la précision du calcul. Il faut savoir que pour chaque pixel, le programme se lance dans une boucle de calculs qu'il va répéter plus ou moins longtemps selon qu'il est dans l'ensemble de Mandelbrot (ou de Julia) ou en dehors. Les fameux nombres N précédents sont tout simplement le nombre de boucles ou "d'itérations" que va effectuer le programme pour les différents points, avant de s'arrêter et de passer au point suivant. En théorie, on ne devrait jamais sortir de cette boucle pour les pixels dans l'ensemble; N devrait être infini. Comme il n'est pas question de laisser tourner indéfiniment la machine, on limitera N à une valeur NMAX. Si pour un pixel donné, la machine n'est pas sortie du calcul après NMAX tours, on dira que le pixel appartient à l'ensemble et qu'il est inutile de continuer; on coloriera le pixel en noir. Evidemment, on peut se tromper. Aurait-on continué un ou deux tours de plus que l'on serait peut-être sorti de la boucle; le point attribué à l'ensemble n'en fait peut-être pas partie. Graphiquement, ces erreurs se traduisent par des points noirs abusifs, géné- ralement une poussière de points isolés les uns des autres. Si vous rencontrez trop de ces points, il sera alors temps d'augmenter NMAX. Commencez par utiliser le NMAX que vous proposera le programme. Augmentez-le si vous n'êtes pas satisfait du résultat. Il ne suffit pas toujours d'augmenter NMAX pour améliorer la qualité de l'image. La machine ne fait pas des calculs exacts. Elle commet des erreurs d'arrondi qui vont s'accumuler à mesure qu'elle tourne dans sa boucle de calcul et il peut arriver que le calcul en perde toute signification. L'image prend alors un aspect vitreux caractéristique. Il faudra alors augmenter la précision de la machine pour aller plus loin, en passant des routines "32 bits" aux routines "48 bits", puis "64 bits". Il n'y a pas de relation très claire entre NMAX et la précision de calcul. En gros, plus NMAX est grand, plus il faut de précision de calcul, mais cela peut dépendre du type d'image ou de l'endroit où l'on se trouve dans l'ensemble de Mandelbrot. Le passage de 32 à 48 bits, puis à 64 bits se paie par un ralentissement important des calculs, aussi attendez d'y être forcé pour sauter le pas. Ce programme vous propose donc de constituer une grande librairie graphique d'images de Mandelbrot & cie. Il faut maintenant avouer que toutes ces images doivent avoir la même résolution, 320 x 256 ou autre. Cette ]résolution est la ]90résolution de base. ]10Vous pouvez la choisir à votre gré, ]en modifiant la première ligne du fichier ]90"Mandel.Setup". ]10La présente version vous propose de travailler en overscan 368 x 283. Attention! Il s'agit d'un overscan très "sévère", qui implique un recen- trage important de tous les écrans ouverts sur votre Amiga, ceux du programme et ceux des autres programmes que vous aurez lancés en même temps. Si vous n'avez pas réglé convenablement la hauteur et la largeur de l'image affichée sur votre moniteur comme le conseille Serge Hammouche, les barres de menu risquent d'être partiellement inaccessibles! Choisir une résolution de base en overscan plutôt que 320 x 256 signifie plus de pixels à calculer, c'est à dire des calculs un peu plus longs, davantage de place demandée en mémoire et des disquettes plus vite remplies. Mais le prix des disquettes ne cesse de baisser, et l'overscan est tellement plus spectaculaire... Le programme vous permettra aussi d'utiliser occasionnellement de faire des images en entrelacé ou en haute résolution, voire dans des formats plus exotiques comme 800 x 1000. Ces images ne feront pas partie de la bibliothèque. Notre point de vue est que l'exploration des ensembles de Mandelbrot ou de Julia est une oeuvre de longue haleine, qui va demander énormément de temps et de disquettes. Autant faire le travail dans une résolution raisonable du point de vue temps de calcul et consommation de disquettes, c'est à dire en basse résolution. Vous allez rencontrer des images qui vous paraîtront époustou- flantes et que vous aurez envie de rendre encore plus spectaculaires en haute résolution; notre image de démo en est un exemple. Le programme vous permettra d'utiliser la résolution que vous souhaitez. Mais à notre avis, ce travail devrait rester exceptionnel. Ne vous emballez pas trop vite; toutes les images que vous obtiendrez ne mériteront pas cet honneur. Toutes ces résolutions, résolution de base et résolutions exceptionnelles, sont accessibles à travers le fichier "Mandel.Setup". Vous pourrez les modifier à votre gré en intervenant dans ce fichier avec ED ou avec votre éditeur de textes préféré et en suivant les instructions contenues dans ce fichier. Attention: si vous modifiez la résolution de base, vous devrez recommencer toute votre bibliothèque. ]]09 ]10 ]]09 APPENDICES : ]10 ]]09 Compléments sur le calcul des images ]10 ]]09 Pour contacter l'auteur ]10 ]]09 ]10 ]]90SUR LE CALCUL: La source (xs,ys) étant choisie, tout point (x,y) du plan est associé à un nombre N par l'algorithme en pseudo-code suivant : MANDELBROT : u0=0 , v0=0 , cx=x , cy=y JULIA : u0=x , v0=y , cx=xs, cy=ys Mandelbrot incomplet-1 : u0=xs , v0=ys, cx=x , cy= y Mandelbrot incomplet-2 : u0=xs , v0=x , cx=ys, cy= y Mandelbrot incomplet-3 : u0=xs , v0=y , cx=x , cy= ys Mandelbrot incomplet-4 : u0=x , v0=ys, cx=xs, cy= y Mandelbrot incomplet-5 : u0=y , v0=ys, cx=x , cy= xs u=u0, v=v0 , N=0 TANT QUE (u*u+v*v<2) ET (N