#include <stdlib.h>
#include <stdio.h>
#define L 500
#define h 50
int nlignes=240;
int ncolonnes=320;
double Xmin=-1.2;
double Xmax=1.2;
double Ymin=-1.6;
double Ymax=1.6;
int niter=9;
typedef struct {float a, b;} Point; typedef struct {char r; char g; char b;} pixel; typedef pixel** matrix; typedef struct { int nlig; int ncol; matrix mat;} image;
image AllouerImage(int i,int j) {
int l; image im;
im.nlig=i; im.ncol=j; im.mat=(pixel**)calloc(i,sizeof(pixel*));
for (l=0;l<i;l++)
im.mat[l]=(pixel*)calloc(j,sizeof(pixel));
return im;
}
void EcrireFichier(image img) {
int i,j,local;
FILE* fichier;
fichier=fopen("fract_julia8.ppm","w"); fprintf(fichier,"P6\n");
fprintf(fichier,"%d %d\n",img.ncol,img.nlig); fprintf(fichier,"255\n");
for (i=0;i<img.nlig;i++)
for (j=0;j<img.ncol;j++) {
fprintf(fichier,"%c%c%c",img.mat[i][j].r,img.mat[i][j].g,img.mat[i][j].b);
}
}
image nouv(image depart) {
image arrivee;
int i,j,hauteur,local;
int locallig,localcol; int parcours;
arrivee=AllouerImage(depart.nlig+h,depart.nlig+depart.ncol); local=0;
for (i=0;i<depart.nlig;i++) for (j=0;j<depart.ncol;j++) { locallig=i+h; localcol=j+depart.nlig-i; local++;
hauteur=(h*(int)(depart.mat[i][j].b))/255;
for (parcours=0;parcours<hauteur;parcours++) {
arrivee.mat[locallig-parcours][localcol].g=0;
arrivee.mat[locallig-parcours][localcol].b=255*(h-parcours)/h;
arrivee.mat[locallig-parcours][localcol].r=(parcours*255)/h;
}
}
return arrivee;
}
image Julia(int nlig,int ncol,int niter,double xmin,double xmax,double ymin,double ymax) {
image arrivee;
double pasx,pasy;
double x,y,xo,yo;
double a,b,tmp;
int i,lig,col;
pasx=(xmax-xmin)/ncol;
pasy=(ymax-ymin)/nlig;
arrivee=AllouerImage(nlig,ncol);
printf("Saisissez xo :\n");
scanf("%lf",&xo);
printf("%lf\n",xo);
printf("Saisissez yo :\n");
scanf("%lf",&yo);
printf("%lf\n",yo);
for (lig=0;lig<nlig;lig++)
for (col=0;col<ncol;col++) {
a=xmin+(double)col*pasx;
b=ymax-(double)lig*pasy;
x=a;
y=b;
i=0;
while (i<niter) {
tmp=x;
x=x*x-y*y+xo;
y=2*tmp*y+yo;
if (x*x+y*y>4) break;
i++;
}
arrivee.mat[lig][ncol-col].r=((double)i/niter)*255; }
return arrivee;
}
int main(void) {
image im1,im2;
int nlig,ncol,nul=0;
int i=2;
im1=Julia(nlignes,ncolonnes,niter,Xmin,Xmax,Ymin,Ymax);
EcrireFichier(im1);
printf("Image fractale Julia cree !!!!! \n"); system("pause");
return 0;
}