![]() |
|
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 |