Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
talit:csharp_oop [2025-05-12 11:02] scatalit:csharp_oop [2025-05-18 13:30] (aktuell) – [Auftrag im Detail] sca
Zeile 37: Zeile 37:
    1. Aktuell gibt der Befehl `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**.\\ \\    1. Aktuell gibt der Befehl `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**.\\ \\
    1. Über eine Eigenschaft soll von einem Vektor der zugehörige **Einheitsvektor** ausgegeben werden: `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!\\ \\    1. Über eine Eigenschaft soll von einem Vektor der zugehörige **Einheitsvektor** ausgegeben werden: `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!\\ \\
 +   1. Es ist etwas umständlich, für neue Vektoren immer zuerst ein double-Array erstellen zu müssen. Stattdessen wollen wir die gängigsten Vektoren (sagen wir 1-4D) auch durch `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.\\ \\
    1. Erweitere nun deine Klasse beliebig. Hier einige Vorschläge:    1. Erweitere nun deine Klasse beliebig. Hier einige Vorschläge:
-      1. Weiter Operationen: `DotProduct`, `ScalarMultiplication`, `VectorProduct` +      1. Weiter Operationen: 
-      1. Winkel zwischen zwei Vektoren: `AngleInRad`,AngleInRad` +        1. `DotProduct` 
-      1. Zwei Vektoren vergleiche: `ArePerpendicular`,`AreParallel`,`AreAntiParallel`,`HaveSameMagnitude`+        1. `ScalarMultiplication` (überladendamit `ScalarMultiplication(3,v)und `ScalarMultiplication(v,3)` funktionieren. 
 +        1. `VectorProduct` (nur für 3D Vektoren) 
 +      1. Winkel zwischen zwei Vektoren: `AngleInRad` , `AngleInRad` 
 +      1. Zwei Vektoren vergleichen: `ArePerpendicular`,`AreParallel`,`AreAntiParallel`,`HaveSameMagnitude`\\ \\ 
 +   1. **Operatoren überladen**: Mit `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).\\ \\ 
 +   1. **Optional:** Falls du sehr motiviert bist, könntest du eine Klasse *Matrix* definieren, mit der man Matrizen-Rechnungen durchführen kann. Matrizen können als Verallgemeinerungen von Vektoren betrachtet werden.
  
 +<nodisp 2>
  
- +++++Weiteres|
-===== Zusatzaufgaben ===== +
- +
-   1. Für 3er Vektoren soll nun auch das **Vektorprodukt** berechnet werden können. [[https://de.wikipedia.org/wiki/Kreuzprodukt#Komponentenweise_Berechnung|Wikipedia Vektorprodukt]]\\ \\ +
-   1. Füge nun auch die Skalarmultiplikation hinzu. Dort wird ein Vektor mit einer reellen Zahl gestreckt oder gestaucht. Der Operator `*` soll so überladen werden, dass `v1*v2` das Skalarprodukt ergibt und (s sei eine Zahl, kein Vektor) `v*s` oder `s*v` die Skalarmultiplikation.\\ \\  +
-   1. Erweitere deine Klasse mit weiteren sinnvollen Methoden usw.\\ \\ +
-   1. Falls du sehr motiviert bist, könntest du eine Klasse *Matrix* definieren, mit der man Matrizen-Rechnungen durchführen kann.+
  
 ===== 2D-Drawing ===== ===== 2D-Drawing =====
Zeile 115: Zeile 116:
     * Scene untersucht für alle möglichen Paare von Körpern, ob sie sich berühren und führt die Kollision aus.     * Scene untersucht für alle möglichen Paare von Körpern, ob sie sich berühren und führt die Kollision aus.
  
 +++++
 +
 +</nodisp>
  • talit/csharp_oop.1747047738.txt.gz
  • Zuletzt geändert: 2025-05-12 11:02
  • von sca