' Programma per disegnare l'insieme di Mandelbrot
' Autore: Pino Navato <pnavato@libero.it>

DEFDBL A-Z

CONST INFX = -2, SUPX = 2      ' Porzione di piano complesso
CONST INFY = -2, SUPY = 2      ' da visualizzare

CONST MAXCONT = 61    ' Max num. di ripetizioni del ciclo WHILE
CONST SHIFTCOL = 7    ' Cambia questa costante per modificare tutti i colori

CONST MAXX = 639, MAXY = 479   ' Risoluzione del modo video 12


'Variaibli utilizzate:
'
'cre, cim      Parte reale e immaginaria di c
'zre, zim      Parte reale e immaginaria di z
'tempzre       Variabile temporanea per Zre
'i%, j%        Coordinate di un pixel
'col%          Colore scelto per il pixel esaminato
'contatore%    Numero di ripetizioni del ciclo WHILE


SCREEN 12                            ' Attiva la grafica VGA 640x480
WINDOW (INFX, INFY)-(SUPX, SUPY)     ' Definisce un sistema di coord. logiche

FOR i% = 0 TO MAXX      ' Esamina tutte le colonne dello schermo
   cre = PMAP(i%, 2)
   FOR j% = 0 TO MAXY   ' Esamina i pixel della colonna iesima
      contatore% = 0
      zim = 0:  zre = 0
      cim = PMAP(j%, 3)

      IF cre > -.49 AND cim > -.5 AND cre < .21 AND cim < .5 THEN
         contatore% = MAXCONT
      END IF

      WHILE zre * zre + zim * zim <= 4 AND contatore% < MAXCONT  'Applica la legge di M. 
         tempzre = zre * zre - zim * zim + cre
         zim = 2 * zim * zre + cim
         zre = tempzre
         contatore% = contatore% + 1
      WEND

      col% = (contatore% + SHIFTCOL) AND 15
      PSET (cre, cim), col%   ' <-- Finalmente!
   NEXT j%

   a$ = INKEY$                 ' Eventuale uscita anticipata
   IF a$ = CHR$(27) THEN       ' Per uscire premere ESC
      SCREEN 0
      SYSTEM
   END IF
NEXT i%


DO                        ' Svuota il buffer
   a$ = INKEY$
LOOP UNTIL a$ = ""

DO                        ' Attende un tasto
   a$ = INKEY$
LOOP UNTIL a$ <> ""

SCREEN 0
END


Torna alla pagina sui frattali