Trabalho: sistemas de Lindenmayer

Descrição

Implemente um gerador de gráficos usando sistemas de Lindenmayer. Seu programa deve ler uma descrição de um L-system e produzir uma imagem SVG. Seu programa aceitará conexões TCP. Cada conexão pode dar os seguintes comandos:

(Onde "programa" é a descrição de um L-system)

Um L-system é semelhante a uma gramática gerativa; este artigo descreve de maneira razoável o que é um L-system. Há também este, e a entrada na Wikipedia.

O primeiro exemplo do primeiro artigo mencionado nesta página é:

A
A -> I[+A][-A]IA
I -> II

Onde I significa "desenhe um segmento reto", e + significa "inclua o próximo a direita".

O L-system acima determina a geração de uma árvore. O sistema inicia com o axioma A. Para desenvolver um A, o sistema deve gerar um segmento reto, incluir dois ramos (um à direita, [+A} e um à esquerda, [-A]), e depois incluir mais um segmento reto. Finalmente, deve incluir no final um outro sistema descrito recursivamente como A.

Usando S-expressões, poderíamos descrever este sistema assim:

(l-system
   'A
   '(A  (I (+ A) (- A) I A))
   '(I  II))

Deve haver uma maneira de especificar o ângulo entre ramos. Por exemplo,

(l-system
   'A
   '(A  (I (1.0472 A) (-0.78540 A) I A))
   '(I  II))

Os ramos à direita serão construídos fazendo um ângulo de π/3 = 1.0472 com o ramo central; já os da esquerda terão ângulo de π/4 = 0.78540.

Há muito mais sobre sistemas de Lindenmayer. Havendo interesse, consulte o livro (que hoje é livre) "The algorithmic Beauty of Plants".