Logo
Liceo Scientifico Statale Paolo Frisi
Frattali


Introduzione

Matematica
dei frattali


I frattali nella natura

Arte e musica

Immagini

Biografie

Programmi Basic

Download

Contatti

Bibliografia e links




Virgilio

Programmi

E' interessante l'applicazione informatica dei frattali, anche attraverso programmi semplicissimi scritti in linguaggio BASIC. Nella sezione Download è disponibile Quick Basic 4.5 (inglese), che compila anche file eseguibili (.EXE).

In questa sezione abbiamo incluso dei semplici codici sorgente per visualizzare in modo molto grossolano alcune delle curve citate. Lo scopo di questa sezione non è tanto la grafica, perchè esistono programmi molto più elaborati (vai a Download), quanto evidenziare il procedimento logico e matematico alla base di un frattale.

Spirale di Archimede

     10 REM ***ARCHIMEDES SPIRAL***
     20 REM ***NAME:ARCHI***
     30 SCREEN 11 : CLS : PI=3.141592654
     40 WINDOW (-12,-9)-(12,9)
     50 A=.1 : PSET(0,0)
     6O FOR T=0 TO 16*PI STEP .1 : R=A*T
     70 X=R*COS(T) : Y=R*SIN(T)
     80 LINE -(X,Y)
     90 NEXT T
     100 A$=INPUT$(1) : END
     


Spirale logaritmica

     10 SCREEN 11: CLS : PI = 3.141593
     20 WINDOW (-4, -3)-(4, 3)
     30 A = .05: B = .1 'STARTING POINT AND GROWTH RATE
     40 PSET (A, 0)
     50 FOR T = 0 TO 42 STEP .1: R = A * EXP(B * T)
     60 X = R * COS(T): Y = R * SIN(T)
     70 LINE -(X, Y)
     80 NEXT T: A$ = INPUT$(1): END
     


Curva di Koch

     10 REM ***Koch Curve***
     20 REM ***NAME:KOCH***
     30 SCREEN 11: CLS : PI = 3.141593
     40 WINDOW (-.1, -.4)-(1.1, .5)
     45 INPUT "Numero di iterazioni (consigliato 4)? ", a
     50 P = a: DIM T(P): REM ***ORDER***
     60 H = 3 ^ (-P): PSET (0, 0)
     70 FOR N = 0 TO 4 ^ (P - 1)
     80 REM ***QUATERNARY NOTATION OF N***
     90 M = N: FOR L = 0 TO P - 1
     100 T(L) = M MOD 4: M = M \ 4: NEXT L
     110 REM ***DETERMINATION SLOPE OF NTH LINE SEGMENT***
     120 S = 0: FOR K = 0 TO P - 1
     130 S = S + (T(K) + 1) MOD 3 - 1
     140 NEXT K
     150 REM ***GRAPH OF NTH LINE SEGMENT***
     160 X = X + COS(PI * S / 3) * H
     170 Y = Y + SIN(PI * S / 3) * H
     180 LINE -(X, Y)
     190 NEXT N: BEEP: a$ = INPUT$(1): END
     


Mandelbrot Set

     10 REM ***Mandelbrot Set***
     20 REM ***NAME:MANDEL***
     30 SCREEN 11: CLS
     40 WINDOW (-2.2, -1.4)-(1.1, 1.4)
     50 N1 = 640: N2 = 400: REM ***RESOLUTION***
     60 FOR I = -N1 TO N1: A = -.55 + 1.65 * I / N1
     70 FOR J = 0 TO N2: B = 1.4 * J / N2
     80 U = 4 * (A * A + B * B): V = U - 2 * A + 1 / 4
     90 IF U + 8 * A + 15 / 4 < 0 THEN K = 1: GOTO 170
     100 IF V - SQR(V) + 2 * A - 1 / 2 < 0 THEN K = 1: GOTO 170
     110 X = A: Y = B
     120 FOR K = 1 TO 50
     130 U = X * X: V = Y * Y: W = 2 * X * Y
     140 X = U - V + A: Y = W + B
     150 IF U + V > 16 THEN GOTO 170
     160 NEXT K
     170 L = K MOD 2: PSET (A, B), L: PSET (A, -B), L
     180 NEXT J: NEXT I
     190 BEEP: A$ = INPUT$(1): END
     


Albero di Pitagora

     10 REM *** Lopsided Pythagora's Tree ***
     20 REM *** USING BINARY NUMBER SYSTEM ***
     30 REM *** NAME:PYTHT2 ***
     40 SCREEN 11: CLS : PI = 3.141593
     50 WINDOW (-2.5, -2)-(5.5, 4)
     60 DIM X(2048), Y(2048)
     70 REM *** CHOICE OF ANGLE ***
     71 INPUT "SCEGLI 3 PER UN ALBERO ASIMMETRICO, 4 PER UNO SIMMETRICO: ", T
     72 INPUT "INSERISCI IL NUMERO DI ITERAZIONI (MASSIMO 9): ", IT
     73 IF IT > 9 THEN GOTO 72
     74 CLS
     80 F = PI / T: C = COS(F): S = SIN(F)
     90 A1 = -C * S: A2 = C * C: B1 = A1 + A2: B2 = -A1 + A2
     100 C1 = B2: C2 = 1 - B1: D1 = 1 - A1: D2 = 1 - A2
     110 X(2) = 0: Y(2) = 0: X(3) = 1: Y(3) = 0
     120 LINE (0, 0)-(1, 0): LINE -(1, -1): LINE -(0, -1): LINE -(0, 0)
     130 FOR M = 1 TO IT
     140 FOR J = 0 TO 2 ^ (M - 1) - 1
     150 X0 = X(2 ^ M + 2 * J): Y0 = Y(2 ^ M + 2 * J)
     160 X1 = X(2 ^ M + 2 * J + 1): Y1 = Y(2 ^ M + 2 * J + 1)
     170 U = X1 - X0: V = Y1 - Y0
     180 XA = X0 + A1 * U - A2 * V: YA = Y0 + A2 * U + A1 * V
     190 XB = X0 + B1 * U - B2 * V: YB = Y0 + B2 * U + B1 * V
     200 XC = X0 + C1 * U - C2 * V: YC = Y0 + C2 * U + C1 * V
     210 XD = X0 + D1 * U - D2 * V: YD = Y0 + D2 * U + D1 * V
     220 X(2 ^ (M + 1) + 4 * J) = XA: Y(2 ^ (M + 1) + 4 * J) = YA
     230 X(2 ^ (M + 1) + 4 * J + 1) = XB: Y(2 ^ (M + 1) + 4 * J + 1) = YB
     240 X(2 ^ (M + 1) + 4 * J + 2) = XC: Y(2 ^ (M + 1) + 4 * J + 2) = YC
     250 X(2 ^ (M + 1) + 4 * J + 3) = XD: Y(2 ^ (M + 1) + 4 * J + 3) = YD
     260 LINE (X0, Y0)-(XA, YA): LINE -(XB, YB)
     270 LINE -(X1, Y1): LINE -(XD, YD)
     280 LINE -(XC, YC): LINE -(X0, Y0)
     290 NEXT J: NEXT M: BEEP
     300 A$ = INPUT$(1): END
     


Torna all'inizio