FRENAR
N°06 · Canvas 2D · Morphogenèse

L-System

Une grammaire formelle de quelques caractères engendre des structures botaniques d'une complexité fractalaire. Aristid Lindenmayer (1968) — la nature comme programme récursif.

changez l'espèce et les itérations
// L-System — réécriture + interprétation turtle
const presets = [
  { axiom: 'F', rules: { F: 'F[-F]F[+F]F' }, angle: 25 },
  { axiom: 'X', rules: { X: 'F+[[X]-X]-F[-FX]+X', F: 'FF' }, angle: 25 },
  ...
];

function generate(axiom, rules, iterations) {
  let str = axiom;
  for (let i = 0; i < iterations; i++) {
    str = str.split('').map(c => rules[c] || c).join('');
  }
  return str;
}

function turtle(str, len, angle) {
  const stack = [];
  str.split('').forEach(c => {
    if (c === 'F') { ctx.lineTo(x += Math.cos(a)*len, y += Math.sin(a)*len); }
    else if (c === '+') a -= angle;
    else if (c === '-') a += angle;
    else if (c === '[') stack.push({x,y,a});
    else if (c === ']') ({x,y,a} = stack.pop());
  });
}
À toi de jouer

Modifiez l'angle de la Fougère : 15° produit un sapin, 35° un palmier. À 7 itérations, combien de segments l'arbre binaire contient-il ? (indice : croissance exponentielle).

La grammaire du vivant, traduite en code

Réserver un créneau