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:components
, ein Double-Array, welches die Komponenten des Vektors beinhaltet. Regle über eine Eigenschaft (get/set) Components
den Zugriff auf components
. Sinn könnte machen:Dim
von unten).Dim
(für Dimension) und Magnitude
. Diese sollen über eine Eigenschaft (get) abgerufen werden. Natürlich sollen sie nicht von aussen über einen setter verändert werden können!IsZeroVector()
und IsUnitVector()
. Diese geben den Bool true oder false zurück, je nachdem ob es sich beim Vektor um einen Nullvektor oder einen Einheitsvektor (unit vector) handelt.accuracy
geben: Ist der Betrag des Werts kleiner dieser Genauigkeit, so wird der Wert als $0$betrachtet.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.System.Console.WriteLine(v);
für einen Vektor v
nur „Vector“ aus. Schön wäre aber, wenn man direkt die Komponenten erhalten würde: Jede Klasse in C# erbt automatisch von der Basisklasse object
, und object
definiert die Methode ToString()
. Wenn man also Console.WriteLine(anyObject)
aufrufst, wird intern anyObject.ToString()
verwendet, ganz egal was anyObject
für ein Objekt ist. Mit public override string ToString()
können wir nun diese standardmässige Methode überschreiben.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!Vector v = new Vector(3.2,0,4)
erzeugen. Dafür müssen wir den Konstruktor überladen, in dem wir 'weitere Konstruktoren' wie public Vector(double x, double y, double z)
hinzufügen.DotProduct
ScalarMultiplication
(überladen, damit ScalarMultiplication(3,v)
und ScalarMultiplication(v,3)
funktionieren.VectorProduct
(nur für 3D Vektoren)AngleInRad
, AngleInRad
ArePerpendicular
,AreParallel
,AreAntiParallel
,HaveSameMagnitude
v1 + v2
soll man zwei Vektoren addieren können. Der Operator +
muss dazu überladen werden: Wird +
auf zwei Vektoren angewendet, soll die Add
-Methode aufgerufen werden. Gleiches für v1 * v2
(dot product) und s * v
resp. v * s
(scalar multiplication).