LISTAT0 IN V.BASIC PER OTTENERE UN INSIEME DI MANDELBROT E DI JULIA.
Private Sub form1_Click() '***** INSIEME DI MANDELBROT ***** Dim ingrandimenti, puntoinizioreale, puntoinizioimmaginario, nc, distanza, p, b Dim zr, zy, c, nx, ny, zxy, colore, sdr, sdi, puntoinizior, puntoinizioi ingrandimenti = 1: '(1 ) puntoinizioreale = -2: '(2) , puntoinizioimmaginario = 1.25: '(3) nc = 60: '(4) distanza = 2.5 / 450 / ingrandimenti: '(5) p = 1: '(6) While p <= 500: '(7) sdr = sdr + distanza:'(8) b = 1: '(9) sdi = 0:'(10) While b <= 500: '(11) sdi = sdi + distanza:'(12) puntoinizior = puntoinizioreale + sdr: '(13) puntoinizioi = puntoinizioimmaginario - sdi: '(14) zr = 0: '(15) zi = 0: '(16) c = 0: '(17) Do: '(18) c = c + 1: '(19) nx = zr * zr - zi * zi + puntoinizior: '(20) ny = 2 * zr * zi - puntoinizioi: '(21) zr = nx: '(22) zi = ny: '(23) zxy = zr * zr + zi * zi: '(24) Loop Until (zxy > 4) Or (c > nc): '(25) If zxy > 4 Then colore = c * 100 Else colore = 0: '(26) PSet (p + 200, b + 100), colore:'(27) b = b + 1:'(28) Wend:'(29) p = p + 1:'(30) Wend:'(31) End Sub:'(32) Quella che segue è una piccola esposizione dell' algoritmo. Le prime due righe senza numero rappresentano le dichiarazioni delle variabili. Poi si attribuisconno i valori ad alcune variabili perciò, riga 1:(ingrandimenti = 1). -Riga 2:(puntoinizioreale = -2), -Riga 3:(puntoinizioimmaginario = 1,25), numero dei cicli -riga 4: (nc = 60).Ricordati, i (nc), devi aumentarli se aumenti il numero ingrandimenti. -riga 5:(distanza = 2,5 / 500 / ingrandimenti). Queste istruzioni non hanno bisogno di commenti, i nomi sono esplicativi. I valori di queste prime cimque righe li potrai variare a piacimento per ingrandire e spostarti all'interno del disegno. Poi si comincia un doppio ciclo per assegnare ad ogni pixel della griglia un valore del piano complesso. Perciò mettiamo nella riga 6 del codice un valore iniziale per il primo ciclo cioè: riga 6: (p= 1) nella riga 7 comincia il ciclo delle righe : riga 7:(while p =< 500). Nella 8 mettiamo la somma delle distanze, riga 8:( sdr = sdr + distanza ) Nella riga 9 c'è il secondo valore iniziale: riga 9: (b= 1). Nella riga 10 prima di cominciare il ciclo delle colonne abbiamo l'azzeramento della distanza tra i pixel della colonna, perchè al termine di ogni ciclo interno (while loop) si deve riportare a zero il contatore perchè altrimenti verrebbe sommata alla nuova colonna. Riga 10:( sdi= 0) Nella riga 11 comincia il secondo ciclo, quello delle colonne. riga 11: (while b =< 500) , Nella riga 12, sommiamo le distanze tra i pixel orizzontali. Riga 12: (sdr = sdr + distanza) sdr=somma distanza reale +distanza nella riga 13 calcoliamo il valore da associare ai pixel orizzontali della griglia. Riga 13:(puntoinizior = puntoinizioreale + sdr), Nella riga 14 calcoliamo i valori dei pixel verticali, riga 14:(puntoinizioi = puntoinizioimmaginario + sdi), Nelle righe, 15, 16,17 mettiamo a zero i valori iniziali di Z reale e immaginario che abbiamo visto prima è sempre zero e il valore iniziale del contatore cicli perciò: riga 15: (zr = 0), riga 16:(zi = 0), riga 17 (c = 0). Nella riga 18 facciamo partire un ciclo do: riga 18: (do). Nella riga 19 facciamo partire il contatore dei cicli, quello che assocerà il proprio valore, al colore del pixel, riga 19: (c = c+1). Ora comincia il calcolo della formula. Calcoliamo il primo valore di z reale, riga 20:> (nx = zr*zr - zi*zi + puntoinizior). Poi calcoliamo il primo valore di z immaginario, riga 21:> (ny = 2*zr*zi - puntoinizioi). Adesso assegnamo temporaneamente a zr e a zi i valori di nx e ny, perciò riga 22: (zr = nx) riga 23:(zi = ny) Ora calcoliamo la dimensione di z, riga 24:> (zxy = zr*zi + zy*zi) Qualcuno si ricorderà che per calcolare la dimensione di Z bisognava elevare al quadrato la parte reale e sommarla al quadrato della parte immaginaria per poi estrarre la radice quadrata e vedere se il risultato superava il valore di due, ebbene nella riga 24 non estraiamo la radice quadrata perchè nella riga 25 invece di controllare se Z supera il valore 2 controlliamo se supera il valore di 4 , dato che la radice quadrata di 4 è appunto 2, evitiamo così un'estrazione di radice ad ogni passaggio. Perciò con un comando condizionale che significa se il valore di zxy supera 4 oppure se il contatore dei cicli(c) supera il numero che avevamo stabilito all'inizio(nc) termina il ciclo (do while) altrimenti torna a (do). perciò riga 25:(Loop Until (zxy > 4) Or (c > nc). Ora abbiamo ancora un ciclo condizionale Se zxy supera il valore di 4 il pixel avrà un bel colore, altrimenti sarà nero. perciò riga 26: (If zxy > 4 Then colore = c * 100 Else colore = 0) Ora abbiamo un comando che dice di accendere il pixel della riga numero p e colonna numero b, con il colore scelto nell'istruzione precedente, perciò riga 27: ( PSet (p + 200, b + 100), colore) Adesso che abbiamo colorato il pixel, dobbiamo cominciare con un nuovo pixel, aumentiamo dunque di 1 il numero della colonna b perciò, riga 28: ( b = b + 1) Il primo wend fa terminare il ciclo della colonna, perciò riga 29: (Wend) Adesso aumentiamo di uno anche il numero dei pixel della riga, perciò riga 30:( p = p + 1) Adesso il secondo wend che fa terminare il doppio ciclo e praticamente anche il programma, inseriamo: riga 31 :(Wend). End Sub QUESTO SOTTO E' UN LISTATO
|
---|
- Questa è la pag. 13 -Listato in V.BASIC di Mandelbrot e
Jiulia
- pag. 1 Cosa sono l'insieme di Mandelbrot e di Julia.
- pag. 2 La formula matematica
- pag. 3 La regione del piano complesso che c'interessa.
- pag. 4 Come ingrandire l'immagine.
- pag. 5 Come si collega un pixel del monitor al piano complesso.
- pag. 6 Come addizionare ed elevare al quadrato un numero complesso.
- pag. 7 Come elevare Z^2 fino a Z^26 con poche righe di programma in più.
- pag. 8 Mandelbrot in pseudo 3d
Clicca qui per l'elenco degli applet Java.
Torna alla home page | Menu di Matematica. | Menu della grafica frattale. | Menu dei proverbi bergamaschi. |