Alberi frattali creati con la tecnica L-System

Per la costruzione di questi alberi occorre aggiungere un nuovo simbolo all'alfabeto che abbiamo usato finora.
Oltre alle regole:

Regola F
Avanzare di un segmento di lunghezza assegnata
Regola +
Ruotare in senso antiorario di un angolo assegnato
Regola -
Ruotare in senso orario di un angolo assegnato
delle quali abbiamo diffusamente parlato nell'introduzione alla tecnica l-system, aggiungiamo due nuovi simboli:
Regola [
Memorizzare la posizione e l'angolo corrente
Regola ]
Ripristinare la posizione e l'angolo salvati precedentemente.

Vediamo ora in dettaglio la costruzione del cespuglio a sinistra in alto nella pagina.

Lista delle operazioni

axiom: ++++F

Sostituzione: F= FF-[-F+F+F]+[+F-F-F]

Riduzione: 9/10

Angolo: 22.5°

Nel primo passo viene tracciato un segmento verticale
(22.5°x4=90°).
Al secondo passo:

  1. ++++ l'angolo di partenza è di 90°
  2. FF vengono tracciati due segmenti di lunghezza pari al primo segmento
  3. - viene effettuata una rotazione in verso orario di 22.5°
  4. [ vengono memorizzati la posizione e l'angolo corrente
  5. -F+F+F viene disegnata la spezzata di destra
  6. ] si ritorna alla situazione memorizzata nel punto 3.
  7. + viene effettuata una rotazione in verso antiorario di 22.5°
  8. [ vengono memorizzati la posizione e l'angolo corrente
  9. +F-F-F viene disegnata la spezzata di sinistra
  10. ] si ritorna alla situazione memorizzata nel punto 8.

Così continuando, ogni volta vengono tracciati due rami, uno a destra e l'altro a sinistra del ramo precedente, ed ad ogni iterazione il segmento unitario è i nove decimi del precedente.


La costruzione del cespuglio a destra in alto nella pagina è analoga e ne trasmettiamo soltanto il codice e le immagini dei primi quattro passi.

Lista delle operazioni

axiom: +++F

Sostituzione: F=F[-F]F[+F][F]

Angolo: 30°

Riduzione: 9/10

 


Vediamo ora come tradurre in codice eseguibile il procedimento appena descritto.

Si tratta di introdurre una variabile strutturata tipo matrice nella quale memorizzare nell'ordine:

  1. il numero d'ordine della parentesi: così, alla prima parentesi aperta sarà associato il numero 1, alla seconda il numero 2 e così via;
  2. l'ascissa del punto;
  3. l'ordinata del punto;
  4. l'angolo in gradi attuale.
La dichiarazione della variabile, in linguaggio Visual Basic, è la seguente:
Dim appoggio(1 To 2048, 1 To 3) As Single
Si introduce poi una variabile di nome conta, che si incrementa di uno ogni volta che viene aperta una nuova parentesi quadrata.
Segue il relativo frammento di codice.

Case "["
conta = conta + 1
appoggio(conta,1) = x1s
appoggio(conta,2) = y1s
appoggio(conta,3) = gradovecchio
...
Nel momento in cui si incontra la parentesi chiusa, occorre ripristinare le condizioni precedenti. Questo può essere fatto mediante il seguente frammento di codice:
Case "]"
x1s = appoggio(conta, 1)
y1s = appoggio(conta, 2)
gradovecchio = appoggio(conta, 3)
radiante = gradovecchio * 0.017453293
conta = conta - 1
...

In questo modo la prossima volta che si incontrerà una parentesi chiusa ci si riferirà correttamente all'ultima parentesi aperta.

Segnaliamo un sito dove si possono trovare, fra l'altro, i codici generativi di numerosi alberi frattali costruiti con la tecnica l-system.
Segnaliamo infine la nostra pagina sugli alberi frattali costruiti con metodo ricorsivo.


 

Introduzione
Definizione

Realizzazione

Tipi di frattali
Caratteristiche
Alberi iterativi
Pitagora
Altri LSystem
Indice
Home
Contatti

©2002 - 2008www.webfract.it