diff --git a/u02/readme.txt b/u02/readme.txt new file mode 100644 index 0000000..8440771 --- /dev/null +++ b/u02/readme.txt @@ -0,0 +1,74 @@ + + + +# Praxisaufgabe 2 Einführung in die Computergrafik + +## Team + + * Simon Bruder, Matrikelnummer: 5075324 + +## Bearbeitete Zusatzaufgaben + + * Rechteck-Werkzeug (`rectangle_tool.cpp`) + * Kreisrasterisierer (`bresenham_circle_tool.cpp`) + * Rasterisierer für Sternform (`star_tool.cpp`) + * Sweepline-Algorithmus (`sweep_line_tool.cpp`) + +## Hinweise + +### Projektaufbau + +Die vorgegebene Ordnerstruktur wurde beibehalten. +Es wurde jedoch die `CMakeLists.txt`-Datei in das Wurzelverzeichnis verschoben, +um einen üblichen Aufbau des Projektes zu erhalten, +und es wurden die nicht benötigten Verzeichnisse (`build`, `data`, `dependencies`, `src_solution`) entfernt, +um einen Stand zu erhalten, der tauglich für Versionskontrolle ist. + +Das Projekt kann (abweichend von der Ausgangskonfiguration) +mit folgenden (für CMake-Projekte übliche) Befehlen gebaut werden: + +```bash +# in `u02` +mkdir -p build +cd build +cmake .. +make -j$(nproc) +``` + +Für Tests der Implementation wurde [Catch2](https://github.com/catchorg/Catch2) eingebunden, +was jedoch optional ist und bei Nichtvorhandensein lediglich eine Nachricht beim Aufruf von CMake ausgibt, +welche aber keinen Fehler darstellt. + +Zu einer Auslagerung von grundlegenden Funktionalitäten, +die nicht einem bestimmten Werkzeug zuzuordnen sind, +wurde die Hilfsdatei `util.cpp` (und der zugehörige Header `util.h`) angelegt, +welche in CMake eingebunden ist. + +### Sternrasterisierer + +Der Sternrasterisierer ermöglicht theoretisch +die Rasterisierung von Sternen mit beliebigen Zackenanzahlen +(wobei ein hartes Limit von mindestens 2 Zacken besteht, +jedoch erst ab 3 eine Art Stern vorliegt). +In dem Beispielprogramm kann jedoch aus Komplexitätsgründen nur aus bestimmten Zackenanzahlen gewählt werden, +was jedoch per Kontextmenü möglich ist und damit der Aufgabenstellung entspricht. + +Darüber hinaus wurde rudimentär eine Vorschau der Sternform hinzugefügt, +was jedoch nur für eine feste Zackenanzahl (hier: 5) möglich ist, +ohne die Architektur der Applikation zu ändern. + +### Sweepline-Algorithmus + +Der Sweepline-Algorithmus, der im Programm aufrufbar ist, +hat für ein Beispiel-Dreieck 3 Eckpunkte fest im Code definiert. +Er ist jedoch allgemein ausgelegt und kann mit drei beliebigen Punkten aufgerufen werden, +die ein valides Dreieck bilden. + +Dafür wurde `tool_base` so modifiziert, +dass es Werkzeugen möglich ist, +eine `draw`-Methode mit keinem (für die fest definierten Eckpunkte) +oder drei Punkten (für beliebige Dreiecke) +anzubieten. +Damit das Werkzeug kompatibel mit der Architektur des Hauptprogramms ist, +bietet es jedoch zusätzlich die `draw`-Methode mit zwei Punkten an, +welche jedoch die Punkte ignoriert und die `draw`-Methode ohne Punkte aufruft.