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 estrutura de árvores com ramificações é uma forma de escrever L-systems para demonstrar e experimentar as diferentes possibilidades de se gerar uma árvore com várias ramificações.
\[\]
# Código L-systems indentado:
lsystem Tree extends Branches {
let d1 = 94.74; // divergence angle 1
let d2 = 132.63; // divergence angle 2
let angle = 18.95; // branching angle
let l = 1.109; // length increase rate
let w = 1.732; // width increase rate
set symbols axiom = /(45) F(200, 1) A;
set iterations = 6;
set initialAngle = 90;
set tropismVector = {0, -1, 0};
set tropismCoefficient = 0.22;
set scale = 0.7;
interpret F as DrawForward;
interpret f as MoveForward;
interpret & as Pitch(-angle);
interpret / as Roll;
rewrite A to
F(50, w) [ C & F(50, 1) A ] /(d1)
[ C & F(50, 1) A ] /(d2) [ C & F(50, 1) A ];
rewrite F(length, width) to F(length * l, width * w);
rewrite f(length) to F(length * w);
rewrite C to f(-1) &(-90) f(1) &(90); // correction
}
process all with SvgRenderer;
Figura replicada do código acima rodado no Processador L-systems.

\[\]
# Código L-systems indentado:
lsystem Tree extends Branches {
let d1 = 94.74; // divergence angle 1
let d2 = 132.63; // divergence angle 2
let angle = 18.95; // branching angle
let l = 1.109; // length increase rate
let w = 1.732; // width increase rate
set symbols axiom = /(45) F(200, 1) A;
set iterations = 8;
set initialAngle = 90;
set tropismVector = {0, -1, 0};
set tropismCoefficient = 0.14;
set scale = 0.7;
interpret F as DrawForward;
interpret f as MoveForward;
interpret & as Pitch(-angle);
interpret / as Roll;
rewrite A to
F(50, w) [ C & F(50, 1) A ] /(d1)
[ C & F(50, 1) A ] /(d2) [ C & F(50, 1) A ];
rewrite F(length, width) to F(length * l, width * w);
rewrite f(length) to F(length * w);
rewrite C to f(-1) &(-90) f(1) &(90); // correction
}
process all with SvgRenderer;
Figura replicada do código acima rodado no Processador L-systems.

\[\]
\[\]
# Código L-systems indentado:
lsystem Tree extends Branches {
let d1 = 94.74; // divergence angle 1
let d2 = 132.63; // divergence angle 2
let angle = 18.95; // branching angle
let l = 1.109; // length increase rate
let w = 1.732; // width increase rate
set symbols axiom = /(45) F(100, 1) A;
set iterations = 8;
set initialAngle = 90;
set tropismVector = {0, -1, 0};
set tropismCoefficient = 0.23;
set scale = 0.7;
interpret F as DrawForward;
interpret f as MoveForward;
interpret & as Pitch(-angle);
interpret / as Roll;
rewrite A to
F(50, w) [ C & F(50, 1) A ] /(d1)
[ C & F(50, 1) A ] /(d2) [ C & F(50, 1) A ];
rewrite F(length, width) to F(length * l, width * w);
rewrite f(length) to F(length * w);
rewrite C to f(-1) &(-90) f(1) &(90); // correction
}
process all with SvgRenderer;
Figura replicada do código acima rodado no Processador L-systems.

\[\]
# Código L-systems indentado:
lsystem Tree extends Branches {
let d1 = 180; // divergence angle 1
let d2 = 252; // divergence angle 2
let angle = 36; // branching angle
let l = 1.070; // length increase rate
let w = 1.732; // width increase rate
set symbols axiom = /(45) F(100, 1) A;
set iterations = 6;
set initialAngle = 90;
set tropismVector = {-0.61, 0.77, -0.19};
set tropismCoefficient = 0.40;
set scale = 0.7;
interpret F as DrawForward;
interpret f as MoveForward;
interpret & as Pitch(-angle);
interpret / as Roll;
rewrite A to
F(50, w) [ C & F(50, 1) A ] /(d1)
[ C & F(50, 1) A ] /(d2) [ C & F(50, 1) A ];
rewrite F(length, width) to F(length * l, width * w);
rewrite f(length) to F(length * w);
rewrite C to f(-1) &(-90) f(1) &(90); // correction
}
process all with SvgRenderer;
Figura replicada do código acima rodado no Processador L-systems.
