Visualisierung2
L_System Class Reference

#include <L_System.h>

Classes

struct  state
 

Public Member Functions

 L_System (int width, int height, std::string t)
 Dem Konstruktor wird die Breite und Hoehe des Fensters uebergeben. Diese werden nur fuer die Initialkurve benoetigt. Weiters wird der Typ der Kurve mit uebergeben("hilbert"oder"gosper"). More...
 
 ~L_System (void)
 
void draw (GLuint shader)
 Zeichnet die aktuelle Kurve. More...
 
int getSegmentCount ()
 Gibt die aktuelle Anzahl der Kurvensegmente zurueck. More...
 
int getIteration ()
 Gibt die aktuell maximale Iterationstiefe zurueck. More...
 
int getDrawingIteration ()
 Gibt die Iterationstiefe zurueck die aktuell gezeichnet wird. More...
 
std::string getType ()
 Gibt den Typ der Kurve zurueck ("hilbert" oder "gosper"). More...
 
std::vector< glm::vec3 > getPoints (int order)
 Gibt die Kurveneckpunkte in der Iterationstiefe order zurueck. Sollte order groesser als die aktuell maximale Iterationsstufe sein, werden die Punkte bis zur Iterationsstufe order berechnet und order wird die neue maximale Iterationsstufe. More...
 
void setDrawingIteration (int order)
 Setzt die zu zeichnende Iterationsstufe auf order falls order kleiner als die maximale Iterationsstufe ist. More...
 
void iterate ()
 Die maximale Iterationsstufe wird um 1 erhoeht und die Punkte der naechsten Iterationsstufe berechnet. More...
 
void increaseDrawingIteration ()
 erhoehe die zu zeichnende Iterationsstufe um 1. More...
 
void decreaseDrawingIteration ()
 veringere die zu zeichnende Iterationsstufe um 1. More...
 

Private Member Functions

void initCurve (int w, int h)
 Initialisiert eine Standartkurve als Order 0 Kurve und allgemeine Parameter. More...
 
void initHilbert ()
 Setzt den Startstring und die Kurveneigenschaften der Hilbertkurve. More...
 
void initGosper ()
 Setzt den Startstring und die Kurveneigenschaften der Gosperkurve. More...
 
std::string getRule (char var)
 Ueberprueft ob es fuer den uebergebenen char eine Ersetzungsregel gibt und gibt diese, falls vorhanden, zurueck. More...
 
double degToRad (double angle)
 Rechnet Gradwinkel in Radiant um. More...
 

Private Attributes

std::vector< GLuint > vao
 Liste von Vertex Array Objects. An der Stelle i ist das vao der Kurve von Grad i-1. More...
 
std::vector< GLuint > positionBuffer
 Liste von Positionsbuffern. An der Stelle i ist der Buffer der Kurve von Grad i-1. More...
 
std::vector< int > positioncount
 Liste von Anzahl der Knoten. An der Stelle i ist die Knotenanzahl der Kurve von Grad i-1. More...
 
std::vector< std::vector< glm::vec3 > > points
 Liste von Positionslisten. An der Stelle i sind die Knotenpositionen der Kurve von Grad i-1. More...
 
int width
 Breite des Anzeigefensters. More...
 
int height
 Hoehe des Anzeigefensters. More...
 
int iteration
 Aktuell maximale Iterationsstufe. More...
 
int drawingIteration
 Aktuell zu zeichnende Iterationsstufe. More...
 
double distance
 Laenge eines Kurvensegments. More...
 
double delta
 Winkel der bei einer Winkelaenderung auf den aktuellen Winkel ab oder angerechnet wird. More...
 
int segmentcount
 Anzahl der Segmente der aktuell maximalen Iterationsstufe. More...
 
std::string type
 Aktueller Kurventyp. More...
 
std::string currentString
 Aktueller String der zu berechnenden Iterationsstufe. More...
 
std::vector< std::string > rules
 Liste von Ersetzungsregeln. More...
 

Detailed Description

Diese Klasse implementiert ein Lindenmeyer System zum zeichnen von Fraktalen mithilfe von Turtle Graphics. Hierbei wurden aber einige Funktionen ausgeklammert, da diese im Projekt nicht benoetigt werden und Zeit kosten wuerde. Gemeint sind der "f" Operator, der einen Vorschub der Turtle ohne zu zeichnen verwirklicht (Die Flaechenfuellenden Kuven haben keine Luecken), und den Verzweigungsoperatoren "[" und "]" (Die Kurven haben keine Verzweigungen). Weiters wird beim "F" Operator nicht nach einer Regel gesucht, sondern nur ein Kurvensegment gezeichnet.
Um die Performance etwas zu verbessern werden die Kurvenpunkte der vorangegangenen Iterationen gespeichert und auf diese bei einer Veringerung der Iterationstiefe zugegriffen ohne sie neu berechnen zu muessen.

Definition at line 18 of file L_System.h.

Constructor & Destructor Documentation

L_System::L_System ( int  w,
int  h,
std::string  t 
)

Dem Konstruktor wird die Breite und Hoehe des Fensters uebergeben. Diese werden nur fuer die Initialkurve benoetigt. Weiters wird der Typ der Kurve mit uebergeben("hilbert"oder"gosper").

Konstruktor des Lindenmeyer Systems. Bekommt die Breite und die Hoehe des Anzeigefensters und den Typ der Kurve die berechnet werden soll ("hilbert" oder "gosper").

Definition at line 10 of file L_System.cpp.

L_System::~L_System ( void  )

Definition at line 124 of file L_System.cpp.

Member Function Documentation

void L_System::decreaseDrawingIteration ( )

veringere die zu zeichnende Iterationsstufe um 1.

Verringert die derzeit gezeichnete Iterationsstufe um 1.

Definition at line 209 of file L_System.cpp.

double L_System::degToRad ( double  angle)
private

Rechnet Gradwinkel in Radiant um.

Rechnet den ueberegeben Gradwinkel in Radiant.

Definition at line 152 of file L_System.cpp.

void L_System::draw ( GLuint  shader)

Zeichnet die aktuelle Kurve.

Zeichnet die Kurve mit den ueberegeben Shader.

Definition at line 136 of file L_System.cpp.

int L_System::getDrawingIteration ( )

Gibt die Iterationstiefe zurueck die aktuell gezeichnet wird.

Gibt die aktuell zu zeichnende Iterationsstufe zurueck.

Definition at line 173 of file L_System.cpp.

int L_System::getIteration ( )

Gibt die aktuell maximale Iterationstiefe zurueck.

Gibt die aktuell maximale Iterationsstufe zurueck.

Definition at line 166 of file L_System.cpp.

std::vector< glm::vec3 > L_System::getPoints ( int  order)

Gibt die Kurveneckpunkte in der Iterationstiefe order zurueck. Sollte order groesser als die aktuell maximale Iterationsstufe sein, werden die Punkte bis zur Iterationsstufe order berechnet und order wird die neue maximale Iterationsstufe.

Gibt die Kurveneckpunkte der uebergeben Iterationsstufe zurueck. Sollte diese groesser als die aktuell maximale Iterationsstufe sein, werden alle Iterationsstufen bis zur ubergeben berechnet und die Punkte der uebergebenen Iterationsstufe zurueckgegeben.

Definition at line 219 of file L_System.cpp.

std::string L_System::getRule ( char  var)
private

Ueberprueft ob es fuer den uebergebenen char eine Ersetzungsregel gibt und gibt diese, falls vorhanden, zurueck.

Ueberprueft ob es zum uebergeben char eine Regel gibt und gibt diese, falls vorhanden, zurueck.

Definition at line 113 of file L_System.cpp.

int L_System::getSegmentCount ( )

Gibt die aktuelle Anzahl der Kurvensegmente zurueck.

Gibt die Anzahl der Kurvensegmente zurueck.

Definition at line 159 of file L_System.cpp.

std::string L_System::getType ( )

Gibt den Typ der Kurve zurueck ("hilbert" oder "gosper").

Gibt den aktuellen Kurventyp zurueck.

Definition at line 190 of file L_System.cpp.

void L_System::increaseDrawingIteration ( )

erhoehe die zu zeichnende Iterationsstufe um 1.

Erhoeht die zur Zeit gezeichnete Iterationsstufe um 1. Ist diese die aktuell maximale Iterationsstufe wird die naechste Iterationsstufe der Kurve errechnet.

Definition at line 197 of file L_System.cpp.

void L_System::initCurve ( int  width,
int  height 
)
private

Initialisiert eine Standartkurve als Order 0 Kurve und allgemeine Parameter.

Initialisiert eine Standartkurve fuer die Iterationsstufe 0 und allgemeine Kurvenparameter.

Definition at line 53 of file L_System.cpp.

void L_System::initGosper ( )
private

Setzt den Startstring und die Kurveneigenschaften der Gosperkurve.

In dieser Methode werden die Parameter der Gosperkurve initialisiert.

Definition at line 94 of file L_System.cpp.

void L_System::initHilbert ( )
private

Setzt den Startstring und die Kurveneigenschaften der Hilbertkurve.

In dieser Methode werden die Parameter der Hilbertkurve initialisiert.

Definition at line 78 of file L_System.cpp.

void L_System::iterate ( )

Die maximale Iterationsstufe wird um 1 erhoeht und die Punkte der naechsten Iterationsstufe berechnet.

Berechne die Positionen der Punkte der naechsten Iterationsstufe.

Definition at line 233 of file L_System.cpp.

void L_System::setDrawingIteration ( int  order)

Setzt die zu zeichnende Iterationsstufe auf order falls order kleiner als die maximale Iterationsstufe ist.

Setze die aktuelle Zeicheniteration auf order falls diese kleiner ist als die aktuell maximale Iterationsstufe.

Definition at line 180 of file L_System.cpp.

Member Data Documentation

std::string L_System::currentString
private

Aktueller String der zu berechnenden Iterationsstufe.

Definition at line 59 of file L_System.h.

double L_System::delta
private

Winkel der bei einer Winkelaenderung auf den aktuellen Winkel ab oder angerechnet wird.

Definition at line 56 of file L_System.h.

double L_System::distance
private

Laenge eines Kurvensegments.

Definition at line 55 of file L_System.h.

int L_System::drawingIteration
private

Aktuell zu zeichnende Iterationsstufe.

Definition at line 54 of file L_System.h.

int L_System::height
private

Hoehe des Anzeigefensters.

Definition at line 52 of file L_System.h.

int L_System::iteration
private

Aktuell maximale Iterationsstufe.

Definition at line 53 of file L_System.h.

std::vector<std::vector<glm::vec3> > L_System::points
private

Liste von Positionslisten. An der Stelle i sind die Knotenpositionen der Kurve von Grad i-1.

Definition at line 49 of file L_System.h.

std::vector<GLuint> L_System::positionBuffer
private

Liste von Positionsbuffern. An der Stelle i ist der Buffer der Kurve von Grad i-1.

Definition at line 47 of file L_System.h.

std::vector<int> L_System::positioncount
private

Liste von Anzahl der Knoten. An der Stelle i ist die Knotenanzahl der Kurve von Grad i-1.

Definition at line 48 of file L_System.h.

std::vector<std::string> L_System::rules
private

Liste von Ersetzungsregeln.

Definition at line 60 of file L_System.h.

int L_System::segmentcount
private

Anzahl der Segmente der aktuell maximalen Iterationsstufe.

Definition at line 57 of file L_System.h.

std::string L_System::type
private

Aktueller Kurventyp.

Definition at line 58 of file L_System.h.

std::vector<GLuint> L_System::vao
private

Liste von Vertex Array Objects. An der Stelle i ist das vao der Kurve von Grad i-1.

Definition at line 46 of file L_System.h.

int L_System::width
private

Breite des Anzeigefensters.

Definition at line 51 of file L_System.h.


The documentation for this class was generated from the following files: