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
36 visitas
perguntada Jul 6, 2018 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, 2018 por Edmar Rocha Pereira (21 pontos)  
editado Jul 6, 2018 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.

...