This is an old revision of the document!


Laboratorul 03. Sisteme bazate pe Gramatici și Reguli

Lindenmayer Systems

Sistemele Lindenmayer (L-Systems) sunt un model matematic introdus de biologul Aristid Lindenmayer în 1968 pentru a modela procesele de creștere ale plantelor. Acestea sunt deosebit de eficiente pentru simularea structurilor și fractalilor asemănătoare plantelor.

Componentele ale sistemelor L:

  • Alfabet: Un set de simboluri care reprezintă diverse componente ale unei plante
  • Axiomă: Șirul inițial de simboluri de la care sistemul își începe construcția
  • Reguli de producție: O colecție de reguli de substituție care definesc modul în care fiecare simbol poate fi înlocuit sau extins într-un șir mai complex de simboluri.

Exemple de structuri care imită plantele se pot vedea în imaginea de mai jos:

În exemplul de mai sus, se folosește interpretarea “turtle” a stringurilor. Astfel, se întâlnesc următoarele simboluri:

  • F - Mers înainte cu distanța d
  • + - Rotație la stânga cu unghiul δ
  • - - Rotație la dreapta cu unghiul δ
  • [ - Adăugarea într-o stivă a stării actuale. Informațiile salvate pe stivă conțin poziția, orientarea și, eventual, alte atribute, cum ar fi culoarea și lățimea liniilor desenate
  • ] - Scoaterea unei stări din stivă și transformarea acesteia în starea curentă. Nu se desenează nimic, deși, în general, poziția se schimbă
  • n - Numărul de iterații

O variantă în care se poate implementa ușor un L-System este folosind biblioteca turtle din Python. Astfel, pentru a inițializa biblioteca, se folosește următoarea secvență de cod:

    # Initialize turtle
    t = turtle.Turtle()
    wn = turtle.Screen()
    t.speed(0)
    t.left(90)
    t.penup()
    t.goto(0, -wn.window_height() // 2 + 20)
    t.pendown()

    # TODO Your implementation goes here

    # Wait for user to close window
    wn.mainloop()

Funcții utile în implementarea unui sistem L, folosind turtle:

    t.forward(distance) # Move forward
    t.goto(position) # Move to position, without drawing anything
    t.left(angle) # Turn left
    t.right(angle) # Turn right
    t.setheading(heading) # Set the rotation angle
    t.penup() # Stop drawing
    t.pendown() # Start drawing

Cellular Automata

Pentru a genera un dungeon 2D de bază folosind cellular automata, se urmează următorii pași:

  • Inițializarea unui grid: Se crează un grid 2D în care fiecare celulă este atribuită aleatoriu ca perete sau podea pe baza unei probabilități specificate
  • Aplicarea regulilor stabilite prin cellular automata: Actualizarea în mod iterativ a gridului, aplicând reguli care determină starea fiecărei celule pe baza vecinilor săi
  • Rafinare rezultat: După mai multe iterații, gridul va forma spații interconectate, asemănătoare unui dungeon. Procesarea suplimentară poate asigura conectivitate și poate adăuga funcții precum camere și coridoare.
gp/laboratoare/03.1741957914.txt.gz · Last modified: 2025/03/14 15:11 by maria_anca.balutoiu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0