home *** CD-ROM | disk | FTP | other *** search
- #include "stdio.h"
- #include "conio.h"
- #include "dos.h"
-
- #define sqr(x) (x*x)
- #define MAXCOL 319
- #define MAXROW 199
- #define MAXCOLORS 4
-
- int max_iterations = 16;
- double max_size = 4.0;
-
- /* FUNCTION PROTOTYPES */
-
- void main(int,char *[]);
- void mandelbrot(double,double,double,double);
- void draw_point(int,int,int);
- void set_mode(int);
- void print_screen(void);
-
- void main ( argc , argv )
-
- int argc;
- char *argv[];
- {
- set_mode(0x4);
- mandelbrot(2.0,-2.0,2.0,-2.0);
- getch(); /* LET THE USER GET THE PRINTER READY. */
- print_screen();
- getch(); /* DON'T CLEAR THE SCREEN UNTIL HE'S READY. */
-
- } /* END OF MAIN */
-
- void mandelbrot ( pmax , pmin , qmax , qmin )
-
- double pmax;
- double pmin;
- double qmax;
- double qmin;
- {
- int color , row , col;
- double p , q , modulus , deltaq , deltap;
- double xcur , xlast , ycur , ylast;
-
- deltap = (pmax-pmin)/(MAXCOL-1);
- deltaq = (qmax-qmin)/(MAXROW-1);
-
- for (col = 0; col <= MAXCOL; col++)
- for (row = 0; row <= MAXROW; row++)
- {
- p = pmin+col*deltap;
- q = qmin+row*deltaq;
-
- xlast = ylast = modulus = 0.0;
- color = 0;
- while ((modulus < max_size) && (color < max_iterations))
- {
- xcur = sqr(xlast) - sqr(ylast) + p;
- ycur = 2*xlast*ylast+q;
- color++;
- xlast = xcur;
- ylast = ycur;
- modulus = sqr(xcur)+sqr(ycur);
- }
- draw_point(col,row,color%MAXCOLORS);
- }
-
- return;
- } /* END OF MANDELBROT */
-
- void draw_point( col , row , color)
-
- int col;
- int row;
- int color;
- {
- union REGS registers;
-
- registers.x.dx = row;
- registers.x.cx = col;
- registers.h.al = (unsigned char)color;
- registers.h.ah = 0x0C;
-
- int86(0x10,®isters,®isters);
- return;
- }
-
- void set_mode ( mode )
-
- int mode;
- {
- union REGS registers;
-
- registers.h.ah = 0;
- registers.h.al = (unsigned char)mode;
-
- int86(0x10,®isters,®isters);
- return;
- }
-
- void print_screen ( )
- {
- union REGS registers;
-
- int86(0x05,®isters,®isters);
- return;
- }
-
-
-