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

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

0 votos
11 visitas
perguntada Jul 5 em Ciência da Computação por Edmar Rocha Pereira (21 pontos)  
editado Jul 6 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 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.

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.

...