> Théorie |
PrograZine issue #8 - http://www.citeweb.net/discase/8/JULIA.htm | Edito | Sommaire | Contribution | Contacts |
Les Fractales - Julia
par loubail - loubail@club-internet.fr http://www.multimania.com/loubail |
Initie | Dos | C |
> fichiers attachés |
Salut à vous programmeurs, programmeuses. Je m’appelle loubail et c’est mon premier article pour prograzine, un super méga cool zine sur la programmation. (Bon d’accord j’en fait peut-être un peu trop :) ). (NDLR : non, non, tu as tout à fait raison :)) Dans cet article je vais traiter un sujet qui sans nul doute va en interesser plus d’un : les fractales. Pour un premier article j’ai essayé de pas faire trop hard. Mon article va expliquer en quoi consiste une fractale, va donner un petit cours de Maths à ceux qui en ont besoin (!) et enfin attaquer la programmation en vous expliquant (et j’espère que je serai assez clair) comment afficher de belles fractales de l’ensemble Julia sur votre ptit écran. Si cet article vous a donné envi d’en savoir davantage sur les fractales, de connaître d’autre formules, si vous n’avez rien compris, si vous vous en fichez faites le moi savoir ! Ecrivez moi à loubail@club-internet.fr LIEN ou bailsite@hotmail.com LIEN Enfin n’hésitez pas à venir visiter mon site : Site en français : http://www.multimania.com/loubail/ LIEN Site en anglais : LIEN P.S. : Si j’élabore un nouvel article sur les fractales j’incorporerai probablement des liens vers des sites consacrés aux fractales. Si les fractales vous passionnent mailez moi des adresses de sites consacrés aux fractales. Comme ça tout le monde en profitera ( et moi en premier !).
En 1958 Benoît Mandelbrot rejoint IBM, où il commença une analyse mathématique des bruits en électronique et commença à percevoir une structure dans laquelle une série de fluctuations de toutes tailles ne pouvaient pas être expliquée par les méthodes statistiques existantes. Chaque fois qu’il résolvait un problème un autre du même type que le précédant mais à une échelle plus petite apparaissait. Il appela alors ceci la géométrie fractale. Le terme fractal vient du latin frangere brisé et fractus irrégulier morcelé. C’est une figure géométrique irrégulière voire fragmentée quelle que soit l’échelle qui détient une borne supérieure et une borne inférieure. Elle possède des éléments spécifiques et ses parties ont la même structure que le tout. La géométrie fractale est donc l’étude d’objets qui à toutes les échelles possèdent les mêmes caractéristiques. Afin de mieux cerner la nature d’une fractale voici la représentation à l’aide d’un ordinateur de la fractale MANDELBROT . ![]() Cette nouvelle géométrie se base sur un principe très important : le principe d’échelle. En effet un objet fractal comme nous venons de le voir précédemment possède la même structure à différentes échelles, à différents grossissements. De ce fait lorsqu’on agrandit un objet fractal les détails sans importance changent et prennent une autre valeur. Ceci permet d’affirmer que chaque partie d’une fractale est importante et représente l’information révélant la construction de la fractale. ( Le document ci-dessus nous fait part de cette étonnante propriété). Une fractale est un objet invariant à toute échelle qui permet de décrire des formes rencontrées dans la nature comme les nuages, les arbres, les côtes de Bretagne (Ces phénomènes qui n’ont rien en commun partagent alors la même structure mathématique). ![]() Les objets fractales sont ainsi à l’origine d’une nouvelle géométrie décrivant mieux la nature que ne le faisait la géométrie traditionnelle. Le calcul des fractals s’applique aux transmissions téléphoniques, à l’astronomie, à la météorologie, à l’hydrographie, à la médecine. Leur domaine fut d’abord celui des turbulences (fusée, avion, automobile) et fut illustré par la carte des côtes de Bretagne. Afin de pouvoir modéliser, à l’aide de formules mathématiques, ce type d’objet, la géométrie fractale doit pouvoir parfaitement les décrire. Pourtant la géométrie fractale se base sur des modèles statistiques. Ceci peut donc surprendre car nul ne peut tenir compte du hasard pour décrire parfaitement un objet ou un fait.
Bon avant d’expliquer quel type de procédé mathématique vous devez utiliser pour obtenir une fractale sur votre écran il me faut tout d’abord présenter ( à ceux qui ne le savent pas) , succintement, l’ensemble de nombre dans lequel ce procédé prend place : l’ensemble des complexes noté : " .
Bon ben là pour être suffisamment clair je sors mon cours de Maths de Terminal et je recopie : Définitions et notations :
Autre définition : Pour tout nombre complexe z de fomr algébrique x + i y, le module de z est le nombre réel positif : ?(x² + y²), noté |z| (NDLR: et lu "module de z") On en déduit que |z|² = x² + y². Bon ben on fait quoi avec ça ? Et ben on fait des calculs J
Soit z et z’ deux nombres complexes : On a z = x + iy et z’ = x’ + iy’ z + z’ = ( x + x’ ) + i ( y + y’ ) z z’ = ( x x’ – y y’ ) + i ( x y’ + x’ y ) Bon je n’irais pas plus loin dans les explications car vous n’avez pas besoin de connaître d’autre choses pour obtenir un rendu d’une fractale Julia !
Les fractales possèdent 3 propriétés importantes :
Dans cet article je ne m’intéresserais qu’aux fractales dont le calcul mathématique est assez simple et que l’on représente en 2 dimensions. Je ne ferai pas référence aux fractales utilisant l’algèbre hypercomplexe. ( et oui ça existe J J J ). Soit P(z) une fonction répétée successivement pour générer une fractale. Par exemple pour une fractale du type Julia P(Z)=Z² + C (avec Z et C E C) (NDLR: Z et c appartiennent à C - ensemble des complexes) Soit PK(Z) le résultat de l’itération de la fonction P pour K itérations. On peut tout aussi bien utiliser la notation PKC(Z) si la fonction P possède un paramètre C (ce que je vais considérer dans l’exemple suivant). Soit A(C) = inf{ |PKC(0)|,K=1,2,3,...} Soit E l'ensemble des modules des images de 0 par PKC. On a card(E)=K c'est-à-dire que E contient K éléments. A(C) est alors la valeur la plus proche de 0 appartenant à E. (car un module est toujours positif) On attribue alors à C la valeur du K associé à inf{ |PKC(0)|,K=1,2,3,...} c'est à dire la valeur de K avec laquelle on obtient la valeur la plus proche de 0 appartenant à E. Lorsqu’on représente une fractale on accorde une couleur à chaque point associé à la longueur de ce cycle. En gros on répète un même calcul n fois jusqu’à dépasser une certaine valeur. (ce calcul est tout simplement la suite). Par exemple les points qui approchent un point fixé auront la couleur 1. Les points qui approchent 2 cycles ont la couleur 2. Les points qui n’approchent pas un cycle durant l’itération ont la couleur maximale pouvant être assignée. Ceci marche bien avec un nombre relativement important d’itération. J’en vois déjà qui s’affole. Ne craignez rien ce n’est pas très complexe. ( fallait bien que je le place quelque part ) Vous allez tout de suite mieux comprendre : ( c’est ce qu’on dit toujours ;) ) Les fractales de l’ensemble julia sont des fractales qui se basent sur la suite complexe
(Je vous montre tout d’abord un rendu de cette fractale ) Celle qui suit a été calculée avec le paramètre suivant : C(0) = 0.3 + 0.6 i ![]() N’est – elle pas magnifique ? Et encore elle n’est quand noir et blanc !
On assigne une valeur qui restera fixe à C : par exemple C(0) = 0.3 + 0.6 i Comme on utilise une suite récurrente on assigne ensuite à Z(0) les coordonnées d’un point donné dans le plan. Puis on initialise une boucle dans laquelle on modifie la valeur de z comme suit : z = z² + C jusqu’à ce que |z|² (c’est – à – dire x² + y² ) dépasse une certaine valeur (560 par exemple). Quand la boucle est terminée ou si la boucle a été exécuté n fois ( par exemple s’il y a eu 200 cycles) on recommence ce processus avec un autre point. Avec cette méthode on balaye un certain nombre de points dont les coordonnées sont comprises entre (-2 , -2 ) et ( 2, 2 ). ( Et oui on ne trouve des julias seulement dans ce secteur ). Bon maintenant que vous avez tout compris et que je vous ai filé le processus à suivre on va pouvoir passer à la partie tant attendue, la partie programmation.
Pour ce programme et je vais décomposer z en x + iy et donc élaborer 2 suites :
C’est plutôt simple. Soit z un nombre complexe. On pose z=x + iy et C = Cx + Cy i Z² + C = (x + iy)² = x² - y² + Cx + i ( 2 x * y + Cy ) (Cf petit cours de Mathématiques) Ainsi Re(Z² + C) = x² - y² + Cx et Im(Z² + C) = 2 x*y + Cy Voilà, maintenant vous avez compris !
Je tiens compte du fait que vous avez des notions de programmation graphique et de programmation en c. Si vous n’en avez pas jetez un œil sur les articles des précédents numéros de prograzine. D’abord je place des fichiers en-têtes :
Bon ben c’est terminé pour cette fois-ci. J’espère avoir interesser un maximum de personnes et recevoir des tonnes de mail, de questions, etc… (pas trop quand même). P.S. : Ne vous amusez pas à faire du copier-coller : utiliser le fichier Julia.c fourni LIEN |
Cet article est la propriété de loubail. L'auteur et la rédaction du magazine déclinent toutes responsabilités vis-à-vis des conséquences que pourrait entraîner ce document. |