Mandelbrot

Programme de Marcel Délèze

Off[General::"spell1"]

Initialisations (partie utilisateur)

Définir la zone de l'image (à modifier pour chaque zoom):

xmin=-2.0;xmax=1.5;ycentre=0;

L'output du programme est constitué de deux fichiers JPEG, l'un de taille réduite (vignette) 105 x 75 pixels, l'autre de taille normale (image) 1260 x 900 pixels.

Entrer le nom du fichier de destination, sans extension (à modifier à chaque zoom):

nomFichier="Mandelbrot";

Le fichier image utilisera le nom précédent tandis que, pour la vignette, ce nom sera concaténé avec la terminaison "-v".

Dans l'accolade ci-dessous, entrer le nom du dossier (= Directory) où la vignette doit être enregistrée

destinationVignette=ToFileName[{"C:","Users","Marcel","site Marcel sur deleze.name","mandelbrot"},nomFichier<>"-v.JPEG"];

Dans l'accolade ci-dessous, entrer le nom du dossier (= Directory) où l'image doit être enregistrée:

destination=ToFileName[{"C:","Users","Marcel","site Marcel sur deleze.name","mandelbrot"},nomFichier<>".JPEG"];

Durée des calculs :

Sur mon ordinateur (Intel, 2 CPU, 2.4 GHz), le programme met environ 40 minutes pour former une image.
Conseil:

exécuter d'abord le programme jusqu'à la fin de "Vignette";

vérifier le résultat obtenu (fichier "*-v.JPEG");

exécuter enfin la sous-section "Traitement de l'image".

Définitions

Le format de l'image est  7/5.

nbPixels= 7*5*180^2;

nbIter=1023;

mandelbrot=Compile[{a,b},Module[{x,y,n, xnew},x=0.;y=0.;n=0;
While[-2.≤x≤2. ∧-2.≤y≤2. ∧n<nbIter,
n++;xnew=(x^2)-(y^2)+a;y=2 x y+b;x=xnew];n]];

pixel[{c_,n_}]:={ColorData["TemperatureMap"][(n/nbIter)],Rectangle[{Re[c]-((Δx)/2),Im[c]-((Δy)/2)},{Re[c]+((Δx)/2),Im[c]+((Δy)/2)}]}

Vignette

facteurReduction=12;

{px,py}={7,5} Round[(Sqrt[(nbPixels/(35*facteurReduction^2))])]+{-1,-1}

nbPixelsEffectif=(px+1) (py+1)

Δx=((xmax-xmin)/px);Δy=Δx

ymax=ycentre+((5(xmax-xmin))/14.)

ymin=ycentre-((5(xmax-xmin))/14.)

grille=Table[x=xmin+r Δx;y=ymin+s Δy;{x+I y,mandelbrot[x,y]},{s,py,0,-1},{r,0,px}];

g=Graphics[{Map[pixel,grille,{2}]},AspectRatio->Automatic,ImageSize->{7,5}Round[ (180/facteurReduction)]];

Export[destinationVignette,g];

Traitement de l'image

{px,py}={7,5} Round[(Sqrt[(nbPixels/35)])]+{-1,-1}

nbPixelsEffectif=(px+1) (py+1)

Δx=((xmax-xmin)/px);Δy=Δx

ymax=ycentre+((5(xmax-xmin))/14.)

ymin=ycentre-((5(xmax-xmin))/14.)

grille=Table[x=xmin+r Δx;y=ymin+s Δy;{x+I y,mandelbrot[x,y]},{s,py,0,-1},{r,0,px}];

g=Graphics[{Map[pixel,grille,{2}]},AspectRatio->Automatic,ImageSize->{7,5} 180];

Export[destination,g];