L-systems, or Lindenmayer systems, are a way of simulating bacteria, plant, and fractal growth. This is done using recursive string rewriting and a way to render strings to a 2D or 3D space, which can be used to create multiple general rulesets.
Recursive string rewriting is used in L-systems to generate the "growth" of the preferred organism. This is done using a set of rules that are applied to modify a given string recursively. Consider the following L-system:
const automatonRules = {
'F': [
'F',
'F-F+',
'F+F-',
'F+[F-Fl]-[+Fl]',
'F[+Fl]F[-Fl]F',
'F--[-F+Fl]++[+F-Fl]',
'F++[Fl]--[+Fl]',
],
'l': [ '' ] // terminal: leaves, of the plant, just visual
}
This ruleset is used to generate a plant-like structure in 2D space. Note how this is done on the whole string, and not just the end portion of the string.
This system was built in a string format with this code:
function l_system(current, rules, generations) {
let next = '';
for (let i = 0; i < generations; i++) {
for (let j = 0; j < current.length; j++) {
let c = current[j]
if (rules[c]) {
next += random(rules[c])
} else {
next += c
}
}
current = next
next = ''
}
return current
}