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

Como replicar Stochastic Plant usando os conhecidos L-Systems (Lindenmayer-Systems)?

0 votos
44 visitas
perguntada Jul 5, 2018 em Ciência da Computação por Edmar Rocha Pereira (21 pontos)  
editado Jul 6, 2018 por Edmar Rocha Pereira

Figura 1.27 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 5, 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.

A extensão de ramificação para L-Systems permite simular estruturas semelhantes a plantas, em vez de simples fractais.

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.

Stochastic plant é uma forma de escrever L-systems para demonstrar e experimentar as diferentes possibilidades de se gerar uma nova árvore por meio estocástico.

\[\]

# Código L-systems indentado:

        fun randomize (number, maxDistance) {
  return number + random(0, maxDistance) -random(0, maxDistance);
}

lsystem StochasticPlant {
  let angle = 30;
  let angleRandomness = 20;
  let length = 10;
  let lengthRandomness = 10;

  set iterations = 7;
  set initialAngle = 90;
  set symbols axiom = F;
  set tropismVector = {0, -1, 0};
  set tropismCoefficient = 0.05;

  rewrite F
    to F[+F]F[-F]F weight 0.33
    to F[+F]F weight 0.33
    to F[-F]F weight 0.34;

  interpret F as DrawForward(randomize(length, lengthRandomness));
  interpret + as TurnLeft(randomize(angle, angleRandomness));
  interpret - as TurnLeft(-randomize(angle, angleRandomness));
  interpret [ as StartBranch();
  interpret ] as EndBranch();
}

process StochasticPlant with SvgRenderer;

Figura replicada do código acima na primeira rodagem no Processador L-systems.:
A imagem será apresentada aqui.

Figura replicada do código acima na segunda rodagem no Processador L-systems.:
A imagem será apresentada aqui.

Figura replicada do código acima na terceira rodagem no Processador L-systems.:

A imagem será apresentada aqui.

...