Erstelle eine Vector Klasse, mit der du Vektorrechnungen durchführen kannst.
Lerne anhand dieses Beispiels die Grundlagen von OOP in C#.
Vector v = new Vector(new double[] { 1, 2, 3 });
v
ein Vektor, so soll z.B. über v.Magnitude
auf diese Eigenschaft zugegriffen werden. Informiere dich darüber, was Eigenschaften und Felder, sowie getter und setter in C# sind. Schaue dir dazu z.B. folgende Quellen an:IsNull()
und IsUnit()
. Diese geben den Bool true oder false zurück, jenachdem ob es sich beim Vektor um einen Nullvektor oder einen Einheitsvektor (unit vector) handelt.Vector.Add(v1,v2);
soll man dann die Vektorsumme zweier Vektoren berechnen können.throw new System.Exception("...");
Vector.Sub(v1,v2);
schreiben müssen, um zwei Vektoren zu Subtrahieren. Stattdessen soll das mit dem Operator -
, also v1-v2
, gehen. Dies geht ganz einfach mit einem Operator Overloading, siehe z.B. hier: C# - Operator Overloading. Füge nun jeweils ein Operator Overloading für die Operatoren + (Vektoraddition), - (Vektorsubtraktion) und * (Skalarprodukt) hinzu.v.UnitVector
. Dieser Einheitsvektor soll selbst wieder vom Typ Vector sein! Um von einem Vektor den zugehörigen Einheitsvektor zu erhalten, dividiert man jede Komponente des Vektors durch die Länge des gesamten Vektors. Tipp: Überlege dir gut, wo genau der Einheitsvektor berechnet werden soll!Neue Features:
v.Components
neu setzen können. Dies geschieht im setter der Components-Eigenschaft.*
soll so überladen werden, dass v1*v2
das Skalarprodukt ergibt und (s sei eine Zahl, kein Vektor) v*s
oder s*v
die Skalarmultiplikation.Ziel dieses Projekts: eine 2D-Zeichen-Bibliothek mit OO in C# schreiben, die es erlaubt, eine Zeichnung aus verschiedenen Objekten zu kombinieren und als Bild oder am Bildschirm auszugeben.
Dazu benötigen wir:
Dieses Repo hilft dir beim Start.
Hausaufgaben
Circle
… noch mehr)
public void move(Vector v)
Methode auf Figure
, die es erlaubt, jede Figur zu bewegen (Wie? Zum Beispiel, indem alle Punkte der Figur bewegt werden - vielleicht benötigt ja Vector
eine move
Methode?)elapsedSeconds
).Vector translation = speed * elapsedSeconds;
- dafür muss unsere Vector
-Klasse die Skalarmultiplikation unterstützen.elapsedSeconds * gravitational_acceleration
.speed.Components[1] += elapsedSeconds * gravitational_acceleration
(angenommen, die Y-Komponente ist die Richtung der Gravitation).