assignments/Assignment_004
Thomas Smits b2192b1639 Update of exercises 2025-10-08 14:00:29 +02:00
..
kryptonier.jpg Update of exercises 2025-10-08 11:57:17 +02:00
readme.md Update of exercises 2025-10-08 14:00:29 +02:00

readme.md

Vektor

🎓 Benotetes Assignment 🎓

📆 Fällig: 21.10.2025 📆

Sie haben schon wieder die ganze Nacht Netflix gesuchtet. Dabei waren auch eine Reihe von Science Fiction und Superhelden-Filmen. Jetzt träumen Sie natürlich sehr intensiv. In Ihrem Traum müssen Sie noch einmal die Vorlesung MA2 besuchen und die Klausur dazu schreiben - obwohl Sie all Ihre Mathe-Prüfungen bereits mit Bravour bestanden haben. Als Sie aufwachen, beschließen Sie die MA2 für immer aus Ihrem Leben zu verbannen, indem Sie sich passende Klassen und Programme schreiben.

Raumschiff

Gerade als Sie merken, dass diese blöden Geschichten Sie überhaupt nicht zur Bearbeitung der Assignments motivieren passiert es ... Es gibt einen lauten Knall. Sie schauen zum Himmel uns sehen dort ein Raumschiff der Kryptonier, die offensichtlich die Weltherrschaft an sich reißen wollen - woher Sie das wisse? Natürlich aus den vielen Filmen, die Sie gesehen haben: Aliens = böse. Zum Glück haben Sie noch eine kleine Rakete im Garten (woher auch immer die stammt), die Sie auf das Raumschiff abfeuern könnten. Aber wie bloß die Flugbahn berechnen?

Plötzlich dämmert es Ihnen: Flugbahnen berechnet man mithilfe der linearen Algebra, insbesondere mit Vektoren. Gesagt, getan...

Paket

Gehen Sie in das Paket 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 (new Vektor(1.0, 2.0, 3.0))
  • Erzeugen eines Nullvektors (alle drei Komponenten [x,y,z] sind 0) (new Vektor())
  • Addieren zweier Vektoren (addiere)
  • Subtrahieren zweier Vektoren (subtrahiere)
  • Auslesen einzelner Komponenten x, y und z (getX, getY, getZ)
  • Multiplikation des Vektors mit einem Skalar (multipliziere)
  • Skalarmultiplikation zweier Vektoren (multipliziere)
  • Kreuzprodukt zweier Vektoren (kreuzprodukt)
  • Erzeugung des Einheitsvektors aus einem gegebenen Vektor (d.h. Vektor der Länge 1 mit derselben Richtung wie der ursprüngliche Vektor) (einheitsvektor)
  • Berechnung des Betrages (der Länge) eines Vektors (betrag)
  • Test, ob zwei Vektoren kollinear (parallel oder antiparallel) sind (isKollinear)
  • Bestimmen des eingeschlossenen Winkels zweier Vektoren (winkel)

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.