home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 18 / CD_ASCQ_18_111294_W.iso / dos / prg / pas / gfxfx / fractal2.pas < prev    next >
Pascal/Delphi Source File  |  1994-05-14  |  1KB  |  45 lines

  1. {$g+,n+,e-}
  2.  
  3. { Reals   :       -1     -0.1      0.3   -1.139
  4.   Complex :        0      0.8     -0.5    0.238 }
  5.  
  6. program Julia;
  7. { Julia Fractal, uses hardcoded ET4000 SVGA mode! By Bas van Gaalen, Holland, PD }
  8. uses crt,graph;
  9. type real=double;
  10. var cx,cy,xo,yo,x1,y1:real; mx,my,a,b,i,orb:word;
  11.  
  12. procedure setpal(col,r,g,b : byte); assembler; asm
  13.   mov dx,03c8h; mov al,col; out dx,al; inc dx; mov al,r
  14.   out dx,al; mov al,g; out dx,al;; mov al,b; out dx,al; end;
  15.  
  16. procedure setvideo;
  17. var grmd,grdr:integer;
  18. {$f+} function detectvga:integer; begin detectvga:=2; end; {$f-}
  19. begin
  20.   installuserdriver('svga256',@detectvga); grdr := 0;
  21.   initgraph(grdr,grmd,'i:\bgi');
  22. end;
  23.  
  24. begin
  25.   write('Real part: '); readln(cx);
  26.   write('Imaginary part: '); readln(cy);
  27.   setvideo;
  28.   for i:=1 to 64 do setpal(i,15+round(i/1.306122449),10+i div 3,10+i div 3);
  29.   mx:=639; my:=479;
  30.   for a:=1 to mx  do
  31.     for b:=1 to my do begin
  32.       xo:=-2+a/(mx/4); { X complex plane coordinate }
  33.       yo:=2-b/(my/4); { Y complex plane coordinate }
  34.       orb:=0; i:= 0;
  35.       repeat
  36.         x1:=xo*xo-yo*yo+cx; y1:=2*xo*yo+cy; xo:=x1; yo:=y1; inc(i);
  37.       until (i=64) or (x1*x1+y1*y1>4) or (abs(x1)>2) or (abs(y1)>2);
  38.       if i<>64 then orb:=i;
  39.       putpixel(a,b,orb); { Plot orbit }
  40.     end;
  41.   while not keypressed do;
  42.   while keypressed do readkey;
  43.   textmode(lastmode);
  44. end.
  45.