DECLARE SUB Box(x1!,y1!,x2!,y2!,dir%) DECLARE SUB PreBox(x1!,y1!,x2!,y2!) DECLARE FUNCTION Iter%(px!,py!) DIM SHARED MaxIter AS INTEGER MaxIter=100 SCREEN 1 PreBox 0,0,319,199 SUB Box(x1,y1,x2,y2,dir%) IF INKEY$="" THEN SYSTEM IF y2-y1<1 THEN EXIT SUB IF dir% THEN xm=.5*(x1+x2) FOR y=y1 TO y2 k%=Iter%(xm,y) IF k%<=MaxIter THEN PSET(xm,y),k% MOD 4 ELSE PSET(xm,y),1 END IF NEXT Box x1,y1,xm,y2,0 Box xm,y1,x2,y2,0 ELSE tv%=-1 ym=.5*(y1+y2) FOR x=x1 TO x2 k%=Iter%(x,ym) IF tv%=-1 THEN tv%=k% MOD 4 ELSE IF k% MOD 4<>tv% THEN tv%=-2 IF k%<=MaxIter THEN PSET(x,ym),k% MOD 4 ELSE PSET(x,ym),1 END IF NEXT IF tv%<>POINT(x1,y1)OR tv%<>POINT(x1,y2)OR tv%<>POINT(x2,y1)OR tv%<>POINT(x2,y2)THEN Box x1,y1,x2,ym,1 Box x1,ym,x2,y2,1 ELSE LINE(x1,y1)-(x2,y2),tv%,BF END IF END IF END SUB FUNCTION Iter%(px,py) zx=px*.0125-2 zy=py*.015-1.5 cx=zx:cy=zy FOR i%=1 TO MaxIter zx2=zx*zx-zy*zy+cx zy=2*zx*zy+cy zx=zx2 IF zx*zx+zy*zy>4 THEN EXIT FOR NEXT Iter%=i% END FUNCTION SUB PreBox(x1,y1,x2,y2) FOR x=x1 TO x2 k%=Iter%(x,y1) IF k%>MaxIter THEN PSET(x,y1),1 ELSE PSET(x,y1),k% MOD 4 END IF k%=Iter%(x,y2) IF k%>MaxIter THEN PSET(x,y2),1 ELSE PSET(x,y2),k% MOD 4 END IF NEXT FOR y=y1 TO y2 k%=Iter%(x1,y) IF k%>MaxIter THEN PSET(x1,y),1 ELSE PSET(x1,y),k% MOD 4 END IF k%=Iter%(x2,y) IF k%>MaxIter THEN PSET(x2,y),1 ELSE PSET(x2,y),k% MOD 4 END IF NEXT Box x1,y1,x2,y2,1 END SUB