From c8e632942b3ac2e3b2190f4df0adc3571f996068 Mon Sep 17 00:00:00 2001 From: Jessica Steinberger Date: Wed, 2 Apr 2025 09:20:50 +0200 Subject: [PATCH] Add Assignment 04 --- Assignment_04/readme.md | 101 ++++++++++++++++++ .../pr2/strukturierung/vektor/Vektor.java | 24 +++++ .../vektor/test/VektorTest.java | 9 ++ 3 files changed, 134 insertions(+) create mode 100644 Assignment_04/readme.md create mode 100644 sources/src/main/java/pr2/strukturierung/vektor/Vektor.java create mode 100644 sources/src/main/java/pr2/strukturierung/vektor/test/VektorTest.java diff --git a/Assignment_04/readme.md b/Assignment_04/readme.md new file mode 100644 index 0000000..9d39128 --- /dev/null +++ b/Assignment_04/readme.md @@ -0,0 +1,101 @@ +# Vektor + +**🎓 Benotetes Assignment 🎓** + +📆 **Fällig: 13.04.2025** 📆 + +## Paket + +Gehen Sie in das Paket [pr2.strukturierung.vektor](../sources/src/main/java/pr2/strukturierung/vektor). + +## Implementierung + +Implementieren Sie eine Klasse `Vektor` mit deren Hilfe man dreidimensionale Vektoren erzeugen und die wichtigsten Vektor-Operationen durchführen kann. Die Komponenten des Vektors sollen reelle Zahlen sein, verwenden Sie daher zur Darstellung und Speicherung der Werte bitte eine Fließkommazahl mit doppelter Genauigkeit. + +Die Objekte der Klasse `Vektor` sollen unveränderlich (immutable) sein. +`Vektor` soll die folgenden Aktionen unterstützen: + + * Anlegen eines neuen Vektors und Befüllen des Vektors mit Daten + * Erzeugen eines Nullvektors (alle drei Komponenten [x,y,z] sind 0) + * Addieren zweier Vektoren + * Subtrahieren zweier Vektoren + * Auslesen einzelner Komponenten x,y und z + * Auslesen aller Komponenten auf einmal als Array + * Multiplikation des Vektors mit einem Skalar + * Skalarmultiplikation zweier Vektoren + * Kreuzprodukt zweier Vektoren + * Erzeugung des Einheitsvektors aus einem gegebenen Vektor (d.h. Vektor der Länge 1 mit derselben Richtung wie der ursprüngliche Vektor) + * Berechnung des Betrages (der Länge) eines Vektors + * Test, ob zwei Vektoren kollinear (parallel oder antiparallel) sind + * Bestimmen des eingeschlossenen Winkels zweier Vektoren + +Bitte denken Sie daran auch eine Methode zu implementieren mit dem man testen kann, ob zwei Vektoren gleich sind (`equals`). Weiterhin ist es für die Programmentwicklung und den Test empfehlenswert eine Methode zur Konvertierung des Vektors in eine Zeichenkette zu implementieren (`toString`). + +Vergessen Sie nicht, Ihre Methoden ausgiebig mit **JavaDoc** zu dokumentieren. + +## Test + +Überprüfen Sie die Funktionalität Ihrer Implementierung mit entsprechenden JUnit-Tests und weise Sie mit diesen Tests nach, dass die implementierten Operationen richtig funktionieren. Verwenden Sie bitte _mindestens_ die folgenden Testdaten: + +### Multiplikation mit einem Skalar + + +\( 6\cdot\begin{pmatrix}1 \\ -5 \\ 3\end{pmatrix} = \begin{pmatrix}6 \\ -30 \\ 18\end{pmatrix} \) + +\( -3\cdot\begin{pmatrix}1 \\ -5 \\ 3\end{pmatrix} = \begin{pmatrix}-3 \\ 15 \\ -9\end{pmatrix} \) + +### Skalarprodukt zweier Vektoren + +\( \begin{pmatrix}1 \\ 2 \\ 3\end{pmatrix}\cdot\begin{pmatrix}-7 \\ 8 \\ 9\end{pmatrix} = 36 \) + +\( \begin{pmatrix}-5 \\ 9 \\ 7\end{pmatrix}\cdot\begin{pmatrix}10 \\ 3 \\ 8\end{pmatrix} = 33 \) + +### Addition und Subtraktion + +\( \begin{pmatrix}4 \\ 0 \\ 8\end{pmatrix}{+}\begin{pmatrix}-1 \\ 4 \\ 7\end{pmatrix} = \begin{pmatrix}3 \\ 4 \\ 15\end{pmatrix} \) + +\( \begin{pmatrix}4 \\ 0 \\ 8\end{pmatrix}{-}\begin{pmatrix}-1 \\ 4 \\ 7\end{pmatrix} = \begin{pmatrix}5 \\ -4 \\ 1\end{pmatrix} \) + +\( \begin{pmatrix}4 \\ 0 \\ 8\end{pmatrix}{+}\begin{pmatrix}-1 \\ 4 \\ 7\end{pmatrix} = \begin{pmatrix}-1 \\ 4 \\ 7\end{pmatrix}{+}\begin{pmatrix}4 \\ 0 \\ 8\end{pmatrix} \) + +### Kreuzprodukt + +\( \begin{pmatrix}1 \\ 2 \\ 3\end{pmatrix}\times\begin{pmatrix}-7 \\ 8 \\ 9\end{pmatrix} = \begin{pmatrix}-6 \\ -30 \\ 22\end{pmatrix} \) + +\( \begin{pmatrix}1 \\ 2 \\ 8\end{pmatrix}\times\begin{pmatrix}4 \\ 3 \\ 5\end{pmatrix} = \begin{pmatrix}-14 \\ 27 \\ -5\end{pmatrix} \) + +### Betrag + +\( \left|\begin{pmatrix}1 \\ 1 \\ 1\end{pmatrix}\right| = \sqrt{3} \) + +\( \left|\begin{pmatrix}5 \\ 4 \\ 3\end{pmatrix}\right| = \sqrt{50} \) + +### Kollinearität und Winkel + +\( \begin{pmatrix}4 \\ 5 \\ 7\end{pmatrix} \) und \( \begin{pmatrix}16 \\ 20 \\ 28\end{pmatrix} \) sind kollinear. + +\( \begin{pmatrix}4 \\ 5 \\ 7\end{pmatrix} \) und \( \begin{pmatrix}16 \\ 20 \\ 21\end{pmatrix} \) sind nicht kollinear. + +Der Winkel zwischen \( \begin{pmatrix}3 \\ -1 \\ 2\end{pmatrix} \) und \( \begin{pmatrix}1 \\ 2 \\ 4\end{pmatrix} \) beträgt \( 58,3^{\circ} \). + +### Komplexere Rechnungen + +\[ +\left[ +\begin{pmatrix}-1 \\ 5 \\ -2\end{pmatrix}\times\begin{pmatrix}2 \\ 1 \\ 2\end{pmatrix} +\right] +\cdot\begin{pmatrix}2 \\ 0 \\ 5\end{pmatrix} = -31 +\] + + +## Abgabe + +Alle Abgaben für die Vorlesung erfolgen über `git`. + +Hierzu gehen Sie wie folgt vor: + + 1. Öffnen Sie eine Kommandozeile (Terminal). + 2. Gehen Sie in Ihr Working Directory. + 3. Rufen Sie mit `bin/submit.sh` das Skript auf, das die Lösungen testet und kompiliert. Wenn Maven eine Fehlermeldung zeigt, beheben Sie diese zuerst, bevor Sie mit dem nächsten Schritt fortfahren. + 4. Wenn Sie Meldung "✅ Projekt gebaut" bekommen, checken Sie Ihre Änderungen in `git` **auf der Kommandozeile** ein (comitten), d.h. mit `git add` und `git commit`. Verwenden Sie **nicht** Eclipse für diesen Schritt. + 5. Rufen Sie mit `bin/submit.sh` erneut das Skript auf. Wenn alles klappt, bekommen Sie die Anzeige "✅ Aktuelle Lösungen eingereicht" und Ihre Lösung ist im System angekommen. diff --git a/sources/src/main/java/pr2/strukturierung/vektor/Vektor.java b/sources/src/main/java/pr2/strukturierung/vektor/Vektor.java new file mode 100644 index 0000000..c138636 --- /dev/null +++ b/sources/src/main/java/pr2/strukturierung/vektor/Vektor.java @@ -0,0 +1,24 @@ +package pr2.strukturierung.vektor; + +import java.util.Arrays; + +/** + * Einfache Implementierung eines dreidimensionalen Vektors, der grundlegende + * Vektor-Operationen unterstützt. + *

+ * Neue Instanzen werden mithilfe des Konstruktors erzeugt und initialisiert. + * + *

+ * Vektor vektor = new Vektor(1, 5, 4);
+ * 
+ *

+ * Die Klasse erlaubt es, Vektoren zu addieren, subtrahieren, mit einem skalar + * oder einem anderen Vektor zu multiplizieren. Weiterhin können auch noch der + * Betrag und das Kreuzprodukt bestimmt werden. + *

+ * Objekte dieser Klasse sind immutable. Die Methoden verändern den Zustand des + * Objektes nicht, sondern geben ein neues Objekt zurück. + */ +public class Vektor { + +} diff --git a/sources/src/main/java/pr2/strukturierung/vektor/test/VektorTest.java b/sources/src/main/java/pr2/strukturierung/vektor/test/VektorTest.java new file mode 100644 index 0000000..393b5a9 --- /dev/null +++ b/sources/src/main/java/pr2/strukturierung/vektor/test/VektorTest.java @@ -0,0 +1,9 @@ +package pr2.strukturierung.vektor.test; + + +/** + * Test für die Klasse Vektor. + */ +public class VektorTest { + +}