/* Fractal na tela */ #include "us.h" #define NTLINHAS 786 // n�mero de linhas na tela #define NTCOLUNAS 1024 // n�mero de colunas na tela #define NFLINHAS 480 // n�mero de linhas no fractal #define NFCOLUNAS 640 // n�mero de colunas no fractal typedef byte tela[NTLINHAS][NTCOLUNAS]; // variaveis float xini,yini; // coordenadas do ponto dentro do fractal dword xpix,ypix; // posi��o do pixel na tela do video dword xorg,yorg; // posi��o da or�gem dos pixels na tela do video float delta; // prototypes void desenhar_fractal(); // A primeira rotina deve ser o main void main() { xorg = 1; yorg = 1; delta = 0.005; desenhar_fractal(); terminate(); } void desenhar_fractal() { /* Calculation of Julia set ------------------------ Written by Kiselev Y. 1994 Definitions of complex numbers: z = x + i*y screen coordinates xini <= x < xini+1024*xstep u = s + i*t parameter \ yini <= y < yini+768*ystep Equation used: f(z) = z^2 - u Iteration: f(z), f(f(z)), f(f(f(z))), ... until |f(...)| > 2 or max_it iterations Result: pixel value at (x,y) is the number of iterations. */ tela far *video = VIDEO_FP(0); byte pix; // valor do pixel for(yini=-1.15, ypix=yorg; ypix<NFLINHAS; yini+=delta, ypix++) { if(ypix==NFLINHAS/2) if( fork()==0 ) { // sou o filho xorg = 600; // na direita yorg = 100; // em baixo ? delta = 0.010; // metade do tamanho } for(xini=-1.55, xpix=xorg; xpix<NFCOLUNAS+400; xini+=delta, xpix++) { float x,x2,y,y2,xy; x=xini; y=yini; for(pix=0; pix<255; pix++) { // max_it=255 x2=x*x; y2=y*y; if(x2+y2>4.0) break; // |z|=sqrt(x^2+y^2) < 2 xy = x*y; x = x2-y2-0.76; // -s y = xy+xy-0.09; // -t } if (pix>2) (*video)[ypix][xpix] = pix; // for(i=1; i<100; i++); } } }