Программа для построения множества Мандельброта (и его фрагментов)
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#include <stdlib.h>
#include "256.с"
#define M 192
#define A 320
#define В 200
#define К 192
#define DEMOCYCLE 500
#define FILEDAT "mand.dat"
typedef struct
{
unsigned char red,green,blue;
}
RGB;
RGB pal[256] ;
/* Функция сдвигает цвета в палитре на 1
вправо */
void swap(void)
{ RGB t;
int i;
t=pal[192];
for (i=192;i>=2;i--) pal[i]=pal[i-1] ;
pal[1]=t;
SetVgaDAC(FP_SEG(pal),FP_OFF(pal)) ;
)
void draw(float Pmin,float Pmax,float Qmin,float Qmax)
{ int x,y,color,k;
float xk,yk,p0,q0,t,r,DP=((Pmax-Pmin)/(A-1)),DQ=((Qmax-Qmin)/(B-1));
for (x=0;x<320;x++)
for (y=0;y<200;y++)
{ p0=Pmin+DP*x;
q0=Qmin+DQ*y;
k=0;
xk=yk=0;
do
{ t=xk;
xk=xk*xk-yk*yk+p0;
yk=2*t*yk+q0;
r=xk*xk+yk*yk;
k++;
} while ((k<K)&&(r<M));
if (r>M)
color=k;
if (k==K)
color=0;
putpixel256(x,
y,color);
}
}
void main(void)
{ int i,,j,x,y,par;
float Pmin[100],Pmax[100],Qmin[100],Qmax[100];
FILE *f;
set256();
/* 0-м цветом выбираем черный */
pal[0].red=pal[0].green=pal[0].blue=0;
/* Устанавливаем цвета с 1-го по 64-й
градациями красного,
с 65-го по 128-й градациями зеленого,
с 129-го по 192-й градациями синего */
for (х=1;х<=64;х++)
{ pal[x].red=64-x;
раl[х].green=х-1;
pal[x].blue=0;
pal[64+x].red=0;
раl[б4+х].green=б4-х;
раl[64+х].blue=х-1;
pal[128+x].red=x-1;
раl[128+х].green=0;
раl[128+х].blue=64-х;
}
SetVgaDAC(FP_SEG(pal) ,FP_OFF(pal)) ;
f=fopen(FILEDAT,"rt") ;
fscanf(f,"%d",$par) ;
for (i=0;i<par;i++)
{ fscanf(f,"%f%f%f%f",&Pmin[i],&Pmax[i],&Qmin[i],&Qmax[i])
;
draw(Pmin[i],Pmax[i],Qmin[i],Qmax[i]) ;
};
for (i=0;(!kbhit());i=(i+l)%par)
{ draw{Pmin[i], Pmax[i],Qmin[i],Qmax[i]);
for (j=0;j<DEMOCYCLE;j++) swap();
}
setTEXT();
}