programmieren-in-rust/aufgaben/sheet06/task2/README.md
2017-02-16 15:12:56 +01:00

1.4 KiB
Executable File

Aufgabe 2: Vektor

In dieser Aufgabe soll ein einfacher, generischer Vektor-Typ erstellt werden. Wieder soll eine Library-Crate als Cargo-Projekt angelegt werden und im tests Untermodul sollen ein paar kurze Unittests die eigentliche Funktionalität testen.

Der Datentyp soll Vector2 heißen und besteht aus einer x- und y-Koordinate. Der Typ dieser Koordinaten ist jedoch generisch und kann grundsätzlich erstmal alles sein. Neben den expliziten Anforderungen in a) und b) kann und/oder muss Vector2 noch weitere Traits implementieren, solange das möglich ist.

a) Konstruktor-Funktionen

Wir möchten vier Konstruktor-Funktionen zu Vector2 hinzufügen:

  • new(x, y): bekommt beide Koordinaten als Parameter
  • origin(): Vektor am Nullpunkt (beide Koordinaten 0)
  • unit_x(): Ein Einheitsvektor mit x=1
  • unit_y(): Ein Einheitsvektor mit y=1

Um diese Funktionen implementieren zu können, greifen wir auf schon vorhandene Traits zu. Diese finden wir in der Crate num-traits, die es wie gewohnt auf crates.io gibt. Von dieser externen Bibliothek müsst ihr euch passende Traits, die ihr nutzen wollt/müsst, aussuchen (wir sind nur an den Traits der Bibliothek interessiert!).

b) Operatoren überladen

Für den Vektor soll der + und * Operator überladen werden (wenn dies möglich ist). Dabei ist das eine natürlich die Vektoraddition (also Vektor + Vektor), das andere ist die Skalarmultiplikation (also Vektor * Skalar).