Primeira vez aqui? Seja bem vindo e cheque o FAQ!
x

Como replicar uma rose leaf usando os conhecidos L-Systems (Lindenmayer-Systems)?

0 votos
9 visitas
perguntada Jul 6 em Ciência da Computação por Edmar Rocha Pereira (21 pontos)  

Figura 5.8 do livro The Algorithmic Beauty of Plants - Przemyslaw Prusinkiewicz and Aristid Lindenmayer (1991) [PL1991].

A imagem será apresentada aqui.

Compartilhe

1 Resposta

0 votos
respondida Jul 6 por Edmar Rocha Pereira (21 pontos)  
editado Jul 6 por Edmar Rocha Pereira

Stochastic Plant

No livro “The Algorithmic Beauty of Plants”, de Przemyslaw Prusinkiewicz e Aristid Lindenmayer, mostra-se que a estrutura de uma árvore pode ser representada por meio dos chamados Context-Free Lindenmayer Systems, ou simplesmente Sistemas-OL.

Os L-systems permitem a definição de formas complexas através do uso de iteração. Eles usam uma linguagem matemática na qual uma cadeia inicial de caracteres é comparada com regras que são avaliadas repetidamente, e os resultados são usados para gerar geometria. O resultado de cada avaliação se torna a base para a próxima iteração da geometria, dando a ilusão de crescimento.

A Rose leaf é uma forma de escrever L-systems para demonstrar e experimentar as diferentes possibilidades de se gerar uma folha de rosa.

\[\]

# Código L-systems indentado:

    lsystem RoseLeaf extends Branches {

  set symbols axiom = [ < A(0,0) . > ] [ < A(0,1) . > ];
  set iterations = 25;
  set initialAngle = 60;

  let LA = 5; // initial length - main segment
  let RA = 1.15; // growth rate - main segment
  let LB = 1.3; // initial length - lateral segment
  let RB = 1.25; // growth rate - lateral segment
  let LC = 3; // initial length - marginal notch
  let RC = 1.19; // growth rate - marginal notch

  interpret G(x) as DrawForward(x*0.8, 2);
  interpret + as TurnLeft(60);
  interpret - as TurnLeft(-60);
  interpret < as StartPolygon(#007700, 2);
  interpret . as RecordPolygonVertex;
  interpret > as EndPolygon;

  rewrite A(t,d) where d == 0
    to . G(LA,RA,-1) . [ + B(t) G(LC,RC,t) . > ]
      [ + B(t) < . ] A(t+1,d);
  rewrite A(t,d) where d == 1
    to . G(LA,RA,-1) . [ - B(t) G(LC,RC,t) . > ]
      [ - B(t) < . ] A(t+1,d);
  rewrite B(t) where t > 0
    to G(LB,RB,-1) B(t-1);
  rewrite G(s,r,t) where t > 1
    to G(s*r,r,t-1);
  rewrite G(s,r,t) where t == -1
    to G(s*r,r,-1);
}

Figura replicada do código acima rodado no Processador L-systems.

A imagem será apresentada aqui.

...