PROGRAM Fractal

? Program adapted from Amazing Computing, Vol.4, No.3, Mar. 1989, p.86
? Originally written in Amiga Basic by Paul Castonguay
? Program generates fractal image in 73 minutes on an Amiga 1000
? Program generates fractal image in 22 minutes on an Amiga 2500

GLOBAL
   CONSTANT Crunch=500
   REAL xmin,xmax,ymin,ymax,dx,dy
   REAL    i,j,M,x,y,r,xk
   INTEGER k
SUBPROGRAM
   INTEGER FNx,FNy
   SUBROUTINE Calculate,SelectColor

k=WINDOW #1 (0,0,640,200,0,0,640,200,-1,-1,31,@"Fractal Window",-1)
CURS_INV

xmin=-.18
xmax=-.14
ymin=1.02
ymax=1.05
dx=(xmax-xmin)/617.
dy=(ymax-ymin)/186.

M=4.
FOR j=ymin TO ymax+dy/2. STEP dy
   FOR i=xmin TO xmax+dx/2. STEP dx
      Calculate()
      SelectColor()
      COLOR_POINT (FNx(i)+11,FNy(j)+10)
   NEXT i
NEXT j

DELAY (500)
END

FUNCTION FNx
PARAMETER
   REAL X
FNx=INT(((X-xmin)+dx/2.)/dx)
GRETURN
END
FUNCTION FNy
PARAMETER
   REAL Y
FNy=186-INT(((Y-ymin)+dy/2.)/dy)
GRETURN
END
SUBROUTINE Calculate
   x=0.
   y=0.
   k=0
   r=0.
   WHILE r<=M AND k<Crunch
      xk=x*x - y*y + i
      y=2*x*y + j
      x=xk
      INC(k)
      r=x*x + y*y
   ENDWHILE
   GRETURN
END
SUBROUTINE SelectColor
   WHEN k IS
      [10,12,14,16,18]
         COLOR_PENS (2,0)
      [11,13,15,17]
         COLOR_PENS (3,0)
      [19,20,21,22,23,24,25]
         COLOR_PENS (1,0)
      OTHERWISE
         IF k>25 AND k<70 THEN
            COLOR_PENS (0,0)
         ELSEIF k>69 AND k<500 THEN
            COLOR_PENS (3,0)
         ELSE
            COLOR_PENS (2,0)
         ENDIF
   ENDCASES
   GRETURN
END

