Capitolo 15
Argomento: il sistema Lindenmayer

Livello: Avanzato

In questo capitolo trarrò informazioni da:

Questa sezione tratterà dei sistemi Lindemayer o sistemi L introdotti e sviluppati nel 1968 dal biologo teoretico Lindenmayer. Un sistema-L è un sistema di regole e simboli utilizzato per modellizare i processi di crescita dello sviluppo delle piante ma anche è anche capace di modellizare la morfologia di una varietà di organismi. Il concetto principale dei sistemi L è il “regole di sostituzione”. Questa tecnica è utilizzata per sostituire alcune condizioni iniziali utilizzando alcune regole.

15.1 definizione formale

Un sistema-L è una grammatica formale con:

  1. un alfabeto V : l’insieme delle variabili del sistema-L. V * rappresenta l’insieme delle “parole” che possiamo generare con qualsiasi simbolo preso dall’alfabeto V , e V + l’insieme delle “parole” con almeno un simbolo.
  2. Un insieme di valori costanti S. Alcuni di questi simboli sono in comune a tutti i sistemi L (in particolare con le tartarughe).
  3. Un assioma di partenza ω preso da V +, è lo stato iniziale.
  4. Un insieme di regole di produzione P dei simboli V .

Questo sistema-L è definito come una ennupla (o tupla) {V,S,ω,P}.

Consideriamo il seguente sistema-L:

Le due regole di produzione sono regole di sostituzione. Ad ogni passo il simbolo A è sostituito dalla sequenza AB ed il simbolo B è sostituito da A. Ecco le prime iterazioni di questo sistema-Lindemayer:

PIC

  1. A
  2. AB
  3. ABA
  4. ABAAB

Ok, ok ma concretamente? Leggiamo la prossima sezione!

15.2 L’interpretazione della tartaruga

Questo primo esempio aiuta a capire cos’è un sistema-L ma ancora non ci fa capire il rapporto con la nostra tartaruga e LOGO
Qui diventa interessante: tutte le parole che abbiamo costruito non hanno significato. Definiremo per ciascuna lettera della sequenza una azione da eseguire da parte della tartaruga e disegneremo con questo metodo disegni 2D e 3D.

15.2.1 Simboli usuali

Per esempio se α = 90 con un passo di 10 unità abbiamo:










Simbolo F + - & ^ \ |









Comando XLOGO  Av 10 SX 90 DX 90 BG 90 BS 90 RSX 90 RDX 90 DX 180









15.2.2 Il fiocco di neve

Consideriamo il sistema-L:

Prime iterazioni:

PIC

PIC

PIC
PIC

Programma XLOGO:


Codice 15.1: Il fiocco di neve
Per FioccoDiNeve :p 
  AssegnaVar "unit 300/Potenza 3 :p-1 
  Ripeti 3 [f :p-1 DX 120] 
Fine 
 
Per f :p 
  Se :p=0 [Av :unit Ferma] 
  f :p-1 SX 60 f :p-1 DX 120 f :p-1 SX 60 
  f :p-1 
Fine

15.2.3 Curva quadratica di Van Koch

Dato questo nuovo sistema-L:

Queste sono le prime rappresentazioni utilizzando α = 90 e dimensionando la dimensione del passo (:unita) in modo che la figura risultante abbia dimensioni costanti.

PIC

PIC

PIC
PIC

E’ molto semplice creare un programma Logo per generare questi disegni:


Codice 15.2: Curva quadratica di Van Koch
# p rappresenta lordine 
per koch :p 
  # la figura finale avra una dimensione massima di 600x600 
  AssegnaVar "unita 300/Potenza 4 :p-1 
  Ripeti 3 [f :p-1 SX 90] f :p-1 
fine 
 
# regole di sostituzione 
per f :p 
  Se :p=0 [Av :unita Ferma] 
  f :p-1 SX 90 f :p-1 DX 90 f :p-1 DX 90 
  f :p-1 f :p-1 SX 90 f :p-1 SX 90 f :p-1 DX 90 f :p-1 
fine

15.2.4 Curva del dragone


Codice 15.3: Curva del dragone
per a :p 
  Se :p=0 [Av :unit Ferma] 
  a :p-1 SX 90 b :p-1 SX 90 
fine 
 
per b :p 
  Se :p=0 [Av :unit Ferma] 
  DX 90 a :p-1 DX 90 b :p-1 
fine 
 
per dragon :p 
  AssegnaVar "unit 300/8/ :p 
  a :p 
fine

PIC

dragon 10

PIC

dragon 15

15.2.5 Curva 3D di Hilbert

Il seguente esempio genererà una curva 3D di Hilbert. E’ una curva singolare perché riempie perfettamente un cubo quando aumentiamo le iterazioni.

Questo è il sistema-L da considerare:


Codice 15.4: Curva 3D di Hilbert
 
per hilbert :p 
  PS 3D 
  AssegnaVar "unit 400/Potenza 2 :p 
  FineLinea ImpSP :unit/2 
  a :p 
  InizioLinea 
  VistaPoligono3D 
fine 
 
per a :p 
  Se :p=0 [Ferma] 
  b :p-1 DX 90 Av :unit SX 90  c :p-1 Av :unit c :p-1 
  SX 90 Av :unit DX 90 d :p-1 BG 90 Av :unit BS 90 d :p-1 
  DX 90 Av :unit SX 90 BG 180 c :p-1 Av :unit c :p-1 
  SX 90 Av :unit SX 90 b :p-1 RDX 180 
fine 
 
per b :p 
  Se :p=0 [Ferma] 
  a :p-1 BG 90 Av :unit BS 90 c :p-1 Av :unit b :p-1 BS 90 
  Av :unit BS 90 d :p-1 BS 180 DX 90 Av :unit DX 90 d :p-1 
  BS 90 DX 180 Av :unit BS 90 b :p-1 DX 180 Av :unit c :p-1 
  BS 90 Av :unit BS 90 a :p-1 RDX 180 
fine 
 
per c :p 
  Se :p=0 [Ferma] 
  DX 180 d :p-1 BS 90 DX 180 Av :unit BS 90 b :p-1 DX 90 
  Av :unit SX 90 c :p-1 BS 90 Av :unit BS 90 a :p-1 BG 180 
  Av :unit a :p-1 BG 90 Av :unit BS 90 c :p-1 SX 90 Av :unit 
  SX 90 b :p-1 BS 90 Av :unit BS 90 d :p-1 RDX 180 
fine 
 
per d :p 
  Se :p=0 [Ferma] 
  DX 180 c :p-1 Av :unit b :p-1 DX 90 Av :unit SX 90 b :p-1 DX 180 
  Av :unit a :p-1 BG 90 Av :unit BS 90 a :p-1 BG 180 Av :unit 
  b :p-1 DX 90 Av :unit SX 90 b :p-1 DX 180 Av :unit c :p-1 RDX 180 
fine

E le prime iterazioni:

PIC

PIC

PIC
PIC

Bello, non è vero?