'Program ATTRACT.BAS searches for strange attractors and displays them 'Copyright (c) 1996 by J. C. Sprott 'This program should compile and run with Microsoft QuickBASIC or QBASIC 'It runs much faster under PowerBASIC DEFDBL A-Z DIM a(5) w% = 320 h% = 200 SCREEN 7 n& = 0 RANDOMIZE TIMER WHILE LEN(INKEY$) = 0 SELECT CASE n& CASE 0 LOCATE 1, 1: PRINT " "; FOR i% = 0 TO 5 a(i%) = 2.4 * (RND - .5) NEXT i% x = 0 y = 0 xe = x + 1E-10 ye = y xmin = 1000000! xmax = -xmin le% = 0 CASE 1 TO 199 IF x < xmin THEN xmin = x IF x > xmax THEN xmax = x xenew = a(0) + xe * (a(1) + a(2) * xe + a(3) * ye) + ye * (a(4) + a(5) * ye) ye = xe xe = xenew IF ABS(xe - x) > .001 THEN le% = 1 CASE 200 IF le% = 0 THEN n& = -1 CASE 201 CLS dx = .1 * (xmax - xmin) IF CSNG(dx) = 0 THEN dx = 1 xmax = xmax + dx xmin = xmin - dx dw = w% / (xmax - xmin) dh = h% / (xmax - xmin) dz = 16 / (xmax - xmin) CASE ELSE xp% = INT(dw * (x - xmin)) yp% = INT(dh * (xmax - y)) IF xp% < 0 OR xp% > w% OR yp% < 0 OR yp% > h% THEN n& = -1 ELSE zp% = INT(dz * (z - xmin)) PSET (xp%, yp%), zp% END IF END SELECT n& = n& + 1 IF n& > 5000 THEN n& = 0 xnew = a(0) + x * (a(1) + a(2) * x + a(3) * y) + y * (a(4) + a(5) * y) ynew = x z = y y = ynew x = xnew IF ABS(x) + ABS(xe) > 10000! THEN n& = 0 WEND