Ce code crée un bitmap dans lequel est contenue la fractale.
une fois compilé on utilise le programme comme ceci :
c:\fractale image.bmp
larg --> largeur du bmp en pixel
haut --> hauteur du bmp en pixel
cx --> coordonée sur les absisses du centre du repere
cy --> coordonée sur les ordonnées du centre du repere
largeur complexe --> largeur du plan complexe (4 pour pas de zoom)
Iterations --> iterations
Je suis conscient que ce code n'est pas super optimiser (surtout our la creation du bitmap) mais ca que je voulais c'était faire des jolis dessins.
Source / Exemple :
#include <stdio.h>
#include <math.h>
FILE *picture;
int main(int argc, char *argv[])
{
//creation de l'entete du bitmap/////////////////////////////////
short haut,larg; //hauteur et largeur de l'image en pixel
char nb0; //nb de zero de fin de lign du bitmap
char title[7]; //tableau contenant les paramètre de l'entete
title[0]=66; // caractère "B"
title[1]=77; // "M"
title[2]=0;
title[3]=54; //divers caractères situés en entete
title[4]=40;
title[5]=01;
title[6]=24; //codage des couleurs en bits
short resolution=2834; //resolution du bitmap
picture = fopen(argv[1],"wb"); //ouverture du fichier en ecriture
//ecriture de l'entete
fwrite(&title[0],sizeof(char),1,picture);
fwrite(&title[1],sizeof(char),1,picture);
for(int i=0;i<8;i++) fwrite(&title[2],sizeof(char),1,picture);
fwrite(&title[3],sizeof(char),1,picture);for(int i=0;i<3;i++) fwrite(&title[2],sizeof(char),1,picture);
fwrite(&title[4],sizeof(char),1,picture);for(int i=0;i<3;i++) fwrite(&title[2],sizeof(char),1,picture);
printf("Larg ? "); scanf("%i",&larg); fwrite(&larg,sizeof(long),1,picture);
printf("Haut ? "); scanf("%i",&haut); fwrite(&haut,sizeof(long),1,picture);
fwrite(&title[5],sizeof(char),1,picture);
fwrite(&title[2],sizeof(char),1,picture);
fwrite(&title[6],sizeof(char),1,picture);
fwrite(&title[2],sizeof(char),1,picture);
for(int i=0;i<8;i++) fwrite(&title[2],sizeof(char),1,picture);
fwrite(&resolution,sizeof(short),1,picture);
fwrite(&title[2],sizeof(char),1,picture);
fwrite(&title[2],sizeof(char),1,picture);
fwrite(&resolution,sizeof(short),1,picture);
fwrite(&title[2],sizeof(char),1,picture);
fwrite(&title[2],sizeof(char),1,picture);
for(int i=0;i<8;i++) fwrite(&title[2],sizeof(char),1,picture);
/////////////////////////////////////////////////////////////////////////////////
nb0=larg%4; // permet de connaitre le nombre de zeros à mettre en fin de ligne du bitmap.
float cx,cy; //coordonnées du plan complexe
float largeur; //largeur du plan complexe
printf("cx ? ");
scanf("%f",&cx);
printf("cy ? ");
scanf("%f",&cy);
printf("largeur complexe ? ");
scanf("%f",&largeur);
short nx=larg,ny=haut;
float xmin=cx-largeur/2.0; //calculs des bornes du plan
float ymax=cy+largeur/2.0*ny/nx; //calculs des bornes du plan
float pas=float(largeur/nx); //calculs du pas d'incrementation
float a,b,x,y,x1; //variables du problemes
short n;
char color[3]; //Tableau des couleurs ( 24bits -> 3 couleurs RVB [0->255])
short iter;
printf("Iterations ? "); //Nb de fois que la suite doit convergé
scanf("%i",&iter);
for(int j=0;j<ny;j++)
{
b=ymax-j*pas;
for(int i=0;i<nx;i++)
{
a=i*pas+xmin;
x=0;y=0;n=0;
do
{
x1=x*x-y*y+a;
y=2*x*y+b;
x=x1;
n=n+1;
}while(((x*x+y*y)<4) && (n<iter));
color[0]=255-255/(sqrt(sqrt(n))+1); //joli codage des couleurs
color[1]=pow(n,0.85); //joli codage des couleurs
color[2]=255/(sqrt(n)+1); //joli codage des couleurs
if(n>(iter-1)) {color[0]=0;color[1]=0;color[2]=0;}
fwrite(&color[0],sizeof(char),1,picture);
fwrite(&color[1],sizeof(char),1,picture); //ecriture dans le bitmap
fwrite(&color[2],sizeof(char),1,picture);
}
for(int j=0;j<nb0;j++) fwrite(&title[2],sizeof(char),1,picture); //zeros de fin de ligne
}
return 0;
}
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.