REM Program ESCAPE.BAS (c) 1994 by J. C. Sprott DIM a(12) 'Array of coefficients RANDOMIZE TIMER 'Reseed random numbers SCREEN 12 'Assume VGA graphics n% = 0 WHILE INKEY$ = "" 'Loop until a key is pressed IF n% = 0 THEN CALL setparams(x, y) CALL advancexy(x, y, n%) CALL testsoln(x, y, n%) IF n% = 1000 THEN CALL display: n% = 0 WEND END SUB advancexy (x, y, n%) 'Advance (x, y) at step n% SHARED a() xnew = a(1) + x * (a(2) + a(3) * x + a(4) * y) + y * (a(5) + a(6) * y) y = a(7) + x * (a(8) + a(9) * x + a(10) * y) + y * (a(11) + a(12) * y) x = xnew n% = n% + 1 END SUB SUB display () 'Plot escape-time contours FOR i% = 0 TO 639 FOR j% = 0 TO 479 x = -5 + i% / 64 y = 5 - j% / 48 n% = 0 WHILE n% < 128 AND x * x + y * y < 1000000 CALL advancexy(x, y, n%) WEND PSET (i%, j%), n% MOD 16 NEXT j% NEXT i% END SUB SUB setparams (x, y) 'Set a() and initialize (x,y) SHARED a() x = 0: y = 0 FOR i% = 1 TO 12: a(i%) = (INT(25 * RND) - 12) / 10: NEXT i% END SUB SUB testsoln (x, y, n%) 'Test the solution IF n% = 1000 THEN n% = 0 'Solution is bounded IF x * x + y * y > 1000000 THEN 'Solution escaped IF n% > 100 THEN n% = 1000 ELSE n% = 0 END IF END SUB