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
PER OTTENERE L'INSIEME DI JULIA.



Private Sub form1_Click()
'*****INSIEME DI JULIA*****
Dim ingrandimenti, puntoinizioreale, puntoinizioimmaginario, nc, distanza, p, b
Dim zr, zy, c, nx, ny, zxy, colore, sdr, sdi, puntoinizior, puntoinizioi

ingrandimenti = 1: '(1)
puntoinizioreale = -1.6: '(2)
, puntoinizioimmaginario = 1.45: '(3)
nc = 60: ' (4)
distanza = 2.5 / 400 / 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 = puntoinizior: '(15)
zi = puntoinizioi: '(16)
c = 0: '(177)
Do: '(18)
c = c + 1: '(19)
nx = zr * zr - zi * zi + -1: ' -1 =puntoinizior: '(20)
'puntoinizior il valore reale, varia da -2 a +05 io ho messo -1
' prova a variare questo valore entro questi valori
avrai una infinità d'insiemi di julia
ny = 2 * zr * zi - 0.4: ' puntoinizioi: '(21)
' puntoinizioi il valore immaginario varia da -1.25 a +1.25
'perciò il valore -0.4 che ho usato puoi cambiarlo entro questi limiti
zr = nx: '(22)
zi = ny: '(23)
zxy = zr * zr + zi * zi: '(24)
Loop Until (zxy > 10) Or (c > nc): '(25)
If zxy > 4 Then colore = c * 10000 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)






Clicca qui per l'elenco degli applet Java.



Torna alla home page Menu di Matematica. Menu della grafica frattale. Menu dei proverbi bergamaschi.