Differences

This shows you the differences between two versions of the page.

Link to this comparison view

gp:laboratoare:03 [2025/03/14 14:23]
maria_anca.balutoiu [Lindenmayer Systems]
gp:laboratoare:03 [2025/03/14 15:46] (current)
maria_anca.balutoiu [Tasks]
Line 10: Line 10:
 Exemple de structuri care imită plantele se pot vedea în imaginea de mai jos: Exemple de structuri care imită plantele se pot vedea în imaginea de mai jos:
 {{ :​gp:​laboratoare:​l_systems_trees.png?​500 |}} {{ :​gp:​laboratoare:​l_systems_trees.png?​500 |}}
-<hidden+ 
-</hidden>+Î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: 
 + 
 +<code> 
 +    # 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() 
 +</​code>​ 
 + 
 +Funcții utile în implementarea unui sistem L, folosind **turtle**:​ 
 +<​code>​ 
 +    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 
 +</code>
  
 ==== Cellular Automata ==== ==== 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
 +
 +=== Conway'​s Game of Life ===
 +Conway’s Game of Life este un cellular automata care simulează evoluția celulelor pe un grid bazat pe reguli simple. Deși este folosit în principal pentru studiul modelelor complexe care apar din reguli simple, aplicarea sa directă în generarea unui dungeon este limitată. Cu toate acestea, alte tehnici cellular automata au fost utilizate în mod eficient pentru a crea modele de dungeons 2D.
 +
 +În Conway’s Game of Life fiecare celulă din grid este inițializată cu una din 2 stări posibile: vie sau moartă. Fiecare celulă interacționează cu cei opt vecini ai săi. La fiecare iterație, au loc următoarele tranziții:
 +  * Orice celulă vie cu mai puțin de doi vecini vii moare
 +  * Orice celulă vie cu doi sau trei vecini vii trăiește
 +  * Orice celulă vie cu mai mult de trei vecini vii moare
 +  * Orice celulă moartă cu exact trei vecini vii devine o celulă vie
 +
 +Starea inițială constituie seed-ul sistemului. Prima generație este creată prin aplicarea regulilor de mai sus simultan la nivelul fiecărei celule din seed, vie sau moartă. Fiecare generație este determinată în funcție de generația precedentă. Regulile continuă să fie aplicate în mod repetat pentru a crea generații viitoare.
  
 +Pentru a implementa un dungeon folosind Conway’s Game of Life, se poate considera o celulă vie echivalentul unui zid, iar o celulă moartă drept podea.
 +==== Tasks ====
 +  - Generați planta F din imaginea de mai sus, folosind L-systems.
 +  - Implementați un dungeon 2D, folosind ​ a cincea generație din Conway’s Game of Life.
 +  - **Bonus 1.** Generați plantele D și E din imaginea de mai sus, folosind L-systems.
 +  - **Bonus 2.** Creați o animație în care să ilustrați fiecare generație din Conway’s Game of Life. 
gp/laboratoare/03.1741955022.txt.gz · Last modified: 2025/03/14 14:23 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