Visualisierung2
|
#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... | |
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.
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.
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
private |
Aktueller String der zu berechnenden Iterationsstufe.
Definition at line 59 of file L_System.h.
|
private |
Winkel der bei einer Winkelaenderung auf den aktuellen Winkel ab oder angerechnet wird.
Definition at line 56 of file L_System.h.
|
private |
Laenge eines Kurvensegments.
Definition at line 55 of file L_System.h.
|
private |
Aktuell zu zeichnende Iterationsstufe.
Definition at line 54 of file L_System.h.
|
private |
Hoehe des Anzeigefensters.
Definition at line 52 of file L_System.h.
|
private |
Aktuell maximale Iterationsstufe.
Definition at line 53 of file L_System.h.
|
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.
|
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.
|
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.
|
private |
Liste von Ersetzungsregeln.
Definition at line 60 of file L_System.h.
|
private |
Anzahl der Segmente der aktuell maximalen Iterationsstufe.
Definition at line 57 of file L_System.h.
|
private |
Aktueller Kurventyp.
Definition at line 58 of file L_System.h.
|
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.
|
private |
Breite des Anzeigefensters.
Definition at line 51 of file L_System.h.