Un programma per generare figure autosimili.

Un'idea intuitiva. Definiamo una legge ricorsiva per  generare una figura F autosimile, unione di sue copie [Graphics:../Images/index_gr_30.gif], ..., [Graphics:../Images/index_gr_31.gif]. Ne spieghiamo prima l'idea intutitiva. Se F è unione di sue copie [Graphics:../Images/index_gr_32.gif], ..., [Graphics:../Images/index_gr_33.gif], anche ogni copia [Graphics:../Images/index_gr_34.gif], essendo in tutto e per tutto simile ad F, sarà unione di sue copie [Graphics:../Images/index_gr_35.gif], ..., [Graphics:../Images/index_gr_36.gif]. Ognuna delle [Graphics:../Images/index_gr_37.gif], ..., [Graphics:../Images/index_gr_38.gif], essendo una copia di [Graphics:../Images/index_gr_39.gif], è anche una copia di F. Le [Graphics:../Images/index_gr_40.gif] sono associate in numero di n ad ognuna delle [Graphics:../Images/index_gr_41.gif], dunque sono in totale [Graphics:../Images/index_gr_42.gif]. F è quindi l'unione di  [Graphics:../Images/index_gr_43.gif] copie di se stessa.  Se ripetiamo lo stesso ragionamento su ognuna delle [Graphics:../Images/index_gr_44.gif], troviamo che [Graphics:../Images/index_gr_45.gif] è l'unione di sue copie [Graphics:../Images/index_gr_46.gif], ..., [Graphics:../Images/index_gr_47.gif], ognuna delle quali è anche una copia di F. F è quindi l'unione di  [Graphics:../Images/index_gr_48.gif] copie [Graphics:../Images/index_gr_49.gif], di se stessa.  Se ripetiamo questo ragionamento m volte, concludiamo che F è l'unione di  [Graphics:../Images/index_gr_50.gif] copie [Graphics:../Images/index_gr_51.gif] di se stessa.
L'osservazione cruciale è ora: ogni [Graphics:../Images/index_gr_52.gif] è più piccola di F, ogni [Graphics:../Images/index_gr_53.gif] è più piccola di Fi, e così via. Si può dimostrare che copie [Graphics:../Images/index_gr_54.gif] di F a un certo momento saranno diventate così piccole che ci appariranno come punti, e potranno essere disegnate in un qualunque modo, senza alterare l'aspetto di F. Dunque l'idea è: scriviamo un programma che disegni le [Graphics:../Images/index_gr_55.gif] copie [Graphics:../Images/index_gr_56.gif]di F come punti (o come freccie, o come figure qualsiasi). Se m sarà abbastanza grande, questo programma ci restituirà l'aspetto autentico di F. Cercheremo ora di precisare questa idea intutiva.

Sia [Graphics:../Images/index_gr_57.gif] la quintupla {X0[i], Y0[i], Alpha[i], Unit[i], Dir[i]}, che descrive il sistema di riferimento associato alla somiglianza tra F ed [Graphics:../Images/index_gr_58.gif]. I valori di X0[i], Y0[i], Alpha[i], Unit[i], Dir[i] dovremo inserirli noi, ogni volta che desidereremo utilizzare il programma.
Iniziamo definendo una operazione Copy[i] = [Graphics:../Images/index_gr_59.gif].

[Graphics:../Images/index_gr_60.gif]

Definiamo quindi una operazione ricorsiva  RuleGen[i], che costruisce la lista {[Graphics:../Images/index_gr_61.gif], ..., [Graphics:../Images/index_gr_62.gif]} di tali sistemi di riferimento. RuleGen[1] è uguale ad {[Graphics:../Images/index_gr_63.gif], ..., [Graphics:../Images/index_gr_64.gif]} . Per comodità del programma, scriveremo RuleGen[i] usando la notazione con parentesi annidate {[Graphics:../Images/index_gr_65.gif], {..., {[Graphics:../Images/index_gr_66.gif], {}}...}}.

[Graphics:../Images/index_gr_67.gif]

Approssimazioni di una figura autosimile. Chiamiamo approssimazione di grado m di F il disegno delle [Graphics:../Images/index_gr_68.gif] copie [Graphics:../Images/index_gr_69.gif] di F, con ogni componente [Graphics:../Images/index_gr_70.gif] rimpiazzata da una figura qualsiasi. Definiamo l'approssimazione di grado m di F in modo induttivo. Ogni figura è un'approssimazione di F di grado 0. F è disegnata con approssimazione m>0 se le sue componenti [Graphics:../Images/index_gr_71.gif], ..., [Graphics:../Images/index_gr_72.gif] sono disegnate con grado di approssimazione m-1. Tanto più alto sarà m, tanto più vicina sara F ad essere una figura autosimile di componenti [Graphics:../Images/index_gr_73.gif], ..., [Graphics:../Images/index_gr_74.gif].

Chiamiamo Base[f] la versione di approssimazione 0 di F nel sistema di riferimento f. Base[f] non soddisferà affatto l'autosomiglianza richiesta: sarà semplicemente una figura arbitraria. Definiamo alcune scelte per Base[f]: una linea tra due punti (arbitrari) XStart ed YStart, la coppia di punti {XStart, YStart}, il solo punto YStart.

[Graphics:../Images/index_gr_75.gif]
[Graphics:../Images/index_gr_76.gif]
[Graphics:../Images/index_gr_77.gif]

Un'ulteriore scelta possibile per Base[f] sarà la freccia, in f, tra XStart ed YStart, etichettata con una lettera "i" (sta per "invertita") nel caso che sia disegnata in un sistema di riferimento ribaltato. Questa etichetta si rende necessaria perchè una freccia è una figura simmetrica, e non è possibile stabilire se sia stata ribaltata oppure no.

[Graphics:../Images/index_gr_78.gif]
[Graphics:../Images/index_gr_79.gif]

Definiamo infine il programma ricorsivo che genera nel sistema di riferimento f l'approssimazione numero m di F, a partire dalla lista RuleList = {[Graphics:../Images/index_gr_80.gif], ..., [Graphics:../Images/index_gr_81.gif]} delle somiglianze tra F e [Graphics:../Images/index_gr_82.gif], ..., [Graphics:../Images/index_gr_83.gif]. Nel caso sia m=0, prendiamo F = Base[f], nel caso m>0, prendiamo F = FF[f,m,RuleList] (con FF da definirsi).

[Graphics:../Images/index_gr_84.gif]

Il punto cruciale è ora la definizione ricorsiva di FF[f,m,R]. FF ha argomenti un sistema di riferimento f, una lista R = {[Graphics:../Images/index_gr_85.gif], ..., [Graphics:../Images/index_gr_86.gif]} di autosomiglianze, un intero m. FF genera la lista {F[Comp[f,[Graphics:../Images/index_gr_87.gif]], m-1]..., F[Comp[f,[Graphics:../Images/index_gr_88.gif]],m-1]}, delle versioni di approssimazione m-1 delle componenti [Graphics:../Images/index_gr_89.gif], ..., [Graphics:../Images/index_gr_90.gif] di F, nei sistemi di riferimento Comp[f,[Graphics:../Images/index_gr_91.gif]],..., Comp[f,[Graphics:../Images/index_gr_92.gif]]. Si noti che abbiamo scritto Comp[f,[Graphics:../Images/index_gr_93.gif]],..., Comp[f,[Graphics:../Images/index_gr_94.gif]] e non [Graphics:../Images/index_gr_95.gif], ..., [Graphics:../Images/index_gr_96.gif]: infatti i sistemi di riferimento associati a [Graphics:../Images/index_gr_97.gif], ..., [Graphics:../Images/index_gr_98.gif] sono sì [Graphics:../Images/index_gr_99.gif], ..., [Graphics:../Images/index_gr_100.gif], ma tali sistemi sono posti entro il sistema di riferimento f, quindi la loro descrizione completa è, per definizione, proprio Comp[f,[Graphics:../Images/index_gr_101.gif]],..., Comp[f,[Graphics:../Images/index_gr_102.gif]].

[Graphics:../Images/index_gr_103.gif]

Infine, per ottenere l'approssimazione numero m di F entro il sistema di riferimento O originario, dobbiamo applicare F a BasicFrame = O, ad m, con il valore di RuleList assegnato a RuleGen[1] = {[Graphics:../Images/index_gr_104.gif], ..., [Graphics:../Images/index_gr_105.gif]}. Chiamiamo questa operazione F0:

[Graphics:../Images/index_gr_106.gif]

Nella prossima sottosezione utilizzeremo F0 per disegnare l'approssimazione m di F.


Converted by Mathematica      February 28, 2003