Eine Mücke ======================================================== Projekt: gamematrix (C++ Library) Rolle: Architekt Datei: design.txt Datum: 16.11.25 Team:bhattial100541 ======================================================== # ---------------------------- # 1. Projektstruktur / Namespace # ---------------------------- Namespace: Matrix3D Ziel: Saubere Trennung der Bibliothek, Vermeidung von Namenskonflikten. Beispiel: namespace Matrix3D { // Funktionen, ggf Klasse(n) } # ---------------------------- # 2. Datenstrukturen / Klassen # ---------------------------- Listen Sie die Klassen oder Structs auf, die verwendet werden: Name Typ Beschreibung Vec3 struct Vec3 (z.B. std::array) 3D-Vektor (x, y, z) Mat4 std::array,4> 4x4-Matrix (homogen) Vec4 struct Vec4 (z.B. std::array) 4D-Vektor (Homogene Koordinaten) gameMatrix class gameMatrix (Container für statische Methoden) Statische Klasse zur Erzeugung von Transformationsmatrizen # ---------------------------- # 3. Operatoren / Templates # ---------------------------- Welche Operatoren oder Templates sollen definiert werden? - Templates für unterschiedliche Datentypen? ☐ Nein - Operatoren: - Mat4 * Mat4(Matrix-Matrix-Multiplikation) - Mat4 * Vec3(Matrix-Vektor-Multiplikation unter Nutzung homogener Koordinaten) # ---------------------------- # 4. Funktionen / Schnittstellen # ---------------------------- Liste der Funktionen mit Eingabe/Ausgabe und kurzer Beschreibung: Funktion Eingabe Ausgabe Kurzbeschreibung matmul const Mat4& A, const Mat4& B Mat4 Matrixmultiplikation 4x4 translate const Vec3& pos Mat4 Erzeugt eine Verschiebungstransformationsmatrix rot3D double angle_deg, char axis ('x', 'y', 'z') Mat4 Erzeugt eine Rotationsmatrix um Achse x/y/z identity --- Mat4 Erzeugt die 4x4-Identitätsmatrix operator* const Mat4& m, const Vec3& v Vec3 Multipliziert Matrizen mit 3D-Vektoren (Homogen-Adapter) # ---------------------------- # 5. Designentscheidungen / Hinweise # ---------------------------- - Rückgabe der Matrizen per Wert oder Referenz? Wert(Transformationsmatrizen, da diese neu erzeugt werden und Copy Elision durch moderne Compiler optimiert werden kann) - Verwendung von std::array oder std::vector? std::array(bessere Performance und speichereffizienter als std::vector) - Homogene Koordinaten für Translation / Rotation (4x4)? ☐ Ja - Weitere Designüberlegungen: Klasse gameMatrix dient als Utility Class, sollte keine eigene zustände besitzen, daher Funktionen sind static implementiert, folgt den OCP principle # ---------------------------- # 6. Deliverables / Milestones # ---------------------------- - design.txt fertig und im Branch architect committed - Übergabe an Entwickler für Implementierung ======================================================== Hinweis: - Dieses Dokument dient als Grundlage für die Implementierung. - Alle Designentscheidungen sollen klar nachvollziehbar sein. ========================================================