Triangolo di Sierpinsky

(Articolo scritto da Marco Pistorio)

I più attenti lettori di “RetroMagazine” (numero 12) avranno notato un ulteriore esempio 7 fornito nell’immagine .d64 contenente i sorgenti delle procedure illustrate.

Questo esempio, che abbiamo il piacere di presentare ufficialmente qui sul gruppo 8BRPI, è relativo ad una forma frattale ben nota, denominata “Triangolo di Sierpinsky“.

Per realizzarla, abbiamo adoperato le procedure BASIC + SIMON’S BASIC descritte nell’articolo “Retromath: Curve, frattali e tartarughe” pubblicato sul numero 12 di “RetroMagazine”, ed abbiamo impiegato gli stessi accorgimenti per rendere tale codice ricorsivo, così come descritto nello stesso articolo di cui sopra.

Per approfondimenti, vi invitiamo a leggere il numero 12 di “RetroMagazine” che potrete scaricare all’indirizzo: http://www.retromagazine.net

100 REM SIMULAZIONE AMBIENTE LOGO.
101 REM ==============================
102 REM === PROCEDURA LOGO ===
103 REM TO TRIASIERPI :LATO :LIVELLO
104 REM REPEAT 3 [FD :LATO RT 120]
105 REM IF :LIVELLO=0 [STOP]
106 REM TRIASIERPI :LATO/2 :LIVELLO-1
108 REM PENUP FD :LATO/2 PENDOWN
110 REM TRIASIERPI :LATO/2 :LIVELLO-1
112 REM PENUP FD :LATO/2
113 REM RT 120 FD :LATO RT 120 PENDOWN
114 REM TRIASIERPI :LATO/2 :LIVELLO-1
115 REM PENUP FD LATO RT 120 PENDOWN
116 REM END
117 REM ==============================
118 :
119 GOTO 4000
120 :
121 PROC FD
122 XF=XI+PR*SIN(AN):YF=YI-PR*COS(AN)
123 IF FG=1 THEN LINE XI,YI,XF,YF,1
124 XI=XF:YI=YF
125 END PROC
126 :
127 PROC BK
128 XF=XI-PR*SIN(AN):YF=YI+PR*COS(AN)
129 IF FG=1 THEN LINE XI,YI,XF,YF,1
130 XI=XF:YI=YF
131 END PROC
132 :
133 PROC RT
134 IC=PG/180*PR
135 AN=AN+IC
136 END PROC
137 :
138 PROC LT
139 IC=PG/180*PR
140 AN=AN-IC
141 END PROC
999 :
1000 REM ESEGUI COMANDO
1004 IF CM$="FD" THEN EXEC FD
1005 IF CM$="BK" THEN EXEC BK
1006 IF CM$="RT" THEN EXEC RT
1007 IF CM$="LT" THEN EXEC LT
1008 IF CM$="PD" THEN FG=1
1009 IF CM$="PU" THEN FG=0
1010 RETURN
1999 :
2000 REM SCANSIONE STRINGA COMANDI SC$
2001 PI=1:PF=LEN(SC$)
2002 P=PI
2003 CM$=MID\$(SC$,P,2)
2004 IF CM$="PD" OR CM$="PU" THEN GOSUB 1000:P=P+3:GOTO2006
2005 GOSUB3000:GOSUB 1000:P=C+1
2006 IF P>PF THEN RETURN
2007 GOTO 2003
2999 :
3000 REM LEGGI PARAMETRO
3001 CI=P+3:CF=PF:C=CI
3002 CR$=MID\$(SC$,C,1)
3003 IF CR$<>CHR\$(32) THEN 3006
3004 PR=VAL(MID\$(SC$,CI,C-CI))
3005 RETURN
3006 C=C+1:IF C-1<CF THEN 3002
3007 GOTO3004
3999 :
4000 REM PROGRAMMA PRINCIPALE
4001 XI=90:YI=170:AN=0:FG=1:LV=4:PG=4*ATN(1)
4003 HIRES 1,0
4004 L(4)=100:GOSUB 10000
4005 PAUSE 10
4006 :
4007 END
9999 :
10000 REM PROCEDURA TRIASIERPI L LV
10002 FOR Z=1 TO 3
10003 SC$="FD"+STR$(L(LV))+" RT 120":GOSUB2000
10004 NEXTZ
10005 IF LV=0 THEN RETURN
10006 LV=LV-1:L(LV)=L(LV+1)/2:GOSUB 10000:LV=LV+1
10007 SC$="PU FD"+STR\$(L(LV)/2)+" PD":GOSUB2000
10008 LV=LV-1:L(LV)=L(LV+1)/2:GOSUB 10000:LV=LV+1
10009 SC$="PU FD"+STR\$(L(LV)/2)+" RT 120 FD"+STR\$(L(LV))+"RT 120 PD":GOSUB2000
10010 LV=LV-1:L(LV)=L(LV+1)/2:GOSUB 10000:LV=LV+1
10011 SC$="PU FD"+STR\$(L(LV))+" RT 120 PD":GOSUB2000
10012 RETURN

 

Have your say