u02: Add readme
This commit is contained in:
parent
2290a6314d
commit
1aae98c18b
74
u02/readme.txt
Normal file
74
u02/readme.txt
Normal file
|
@ -0,0 +1,74 @@
|
|||
<!-- vim: set ft=markdown: -->
|
||||
<!-- LTeX: language=de-DE -->
|
||||
<!-- SPDX-License-Identifier: LGPL-3.0-or-later -->
|
||||
# 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.
|
Reference in a new issue