forked from pr2-lecture-STG/assignments
Add Assignment 04
parent
11e97f0c11
commit
c8e632942b
|
|
@ -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.
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
package pr2.strukturierung.vektor;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Einfache Implementierung eines dreidimensionalen Vektors, der grundlegende
|
||||||
|
* Vektor-Operationen unterstützt.
|
||||||
|
* <p>
|
||||||
|
* Neue Instanzen werden mithilfe des Konstruktors erzeugt und initialisiert.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* Vektor vektor = new Vektor(1, 5, 4);
|
||||||
|
* </pre>
|
||||||
|
* <p>
|
||||||
|
* 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.
|
||||||
|
* <p>
|
||||||
|
* Objekte dieser Klasse sind immutable. Die Methoden verändern den Zustand des
|
||||||
|
* Objektes nicht, sondern geben ein neues Objekt zurück.
|
||||||
|
*/
|
||||||
|
public class Vektor {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
package pr2.strukturierung.vektor.test;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test für die Klasse Vektor.
|
||||||
|
*/
|
||||||
|
public class VektorTest {
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue