Baum (L-System)

Baum (L-System)

. In diesem Skript sieht man, wie man L-Systeme in coffeescript implementieren kann, ohne auf die LSystem-Klasse der igelgrafik-Seite zurückzugreifen

lsystem =

Baum

  axiom: 'F'
  regeln:
    'F': 'aFF-[b-F+F+F]+[c+F-F-F]'.split('')
  funktionen:
    'a': ->
      stiftfarbe grün
    'b': ->
      stiftfarbe hellgrün
    'c': ->
      stiftfarbe gelb
    'F': ->
      vor 5
      speichern -> zurück 5
    '[': ->
      stack.push []
    ']': ->
      rückweg = stack.pop()
      stifthoch()
      für b in rückweg
        b()
      stiftrunter()
    '+': ->
      links 20
      speichern -> rechts 20
    '-': ->
      rechts 20
      speichern -> links 20


berechnen = (l) ->
  l_neu = []
  für x in l
    l_neu = l_neu.concat(wenn lsystem.regeln[x]? dann lsystem.regeln[x] sonst x)
  return l_neu

stack = [[]]


speichern = (f) ->
  stack[stack.length-1] = [ f ].concat stack[stack.length-1]


zeichnen = (l) ->
  für x in l
    lsystem.funktionen[x]()

l = [ lsystem.axiom ]
wiederhole 4, ->
  l = berechnen l

bildschirmleer()
stifthoch(); zurück 250; stiftrunter()
versteckeigel()
geschwindigkeit 300
zeichnen(l)