mirror of
https://github.com/processing/processing4.git
synced 2026-02-11 09:39:19 +01:00
75 lines
1.4 KiB
Plaintext
75 lines
1.4 KiB
Plaintext
class LSystem
|
|
{
|
|
int steps = 0;
|
|
|
|
String axiom;
|
|
String rule;
|
|
String production;
|
|
|
|
float startLength;
|
|
float drawLength;
|
|
float theta;
|
|
|
|
int generations;
|
|
|
|
LSystem() {
|
|
axiom = "F";
|
|
rule = "F+F-F";
|
|
startLength = 190.0;
|
|
theta = radians(120.0);
|
|
reset();
|
|
}
|
|
|
|
void reset() {
|
|
production = axiom;
|
|
drawLength = startLength;
|
|
generations = 0;
|
|
}
|
|
|
|
int getAge() {
|
|
return generations;
|
|
}
|
|
|
|
void render() {
|
|
translate(width/2, height/2);
|
|
steps += 5;
|
|
if (steps > production.length()) {
|
|
steps = production.length();
|
|
}
|
|
for (int i = 0; i < steps; i++) {
|
|
char step = production.charAt(i);
|
|
if (step == 'F') {
|
|
rect(0, 0, -drawLength, -drawLength);
|
|
noFill();
|
|
translate(0, -drawLength);
|
|
}
|
|
else if (step == '+') {
|
|
rotate(theta);
|
|
}
|
|
else if (step == '-') {
|
|
rotate(-theta);
|
|
}
|
|
else if (step == '[') {
|
|
pushMatrix();
|
|
}
|
|
else if (step == ']') {
|
|
popMatrix();
|
|
}
|
|
}
|
|
}
|
|
|
|
void simulate(int gen) {
|
|
while (getAge() < gen) {
|
|
production = iterate(production, rule);
|
|
}
|
|
}
|
|
|
|
String iterate(String prod_, String rule_) {
|
|
drawLength = drawLength * 0.6;
|
|
generations++;
|
|
String newProduction = prod_;
|
|
newProduction = newProduction.replaceAll("F", rule_);
|
|
return newProduction;
|
|
}
|
|
}
|