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_sca [2025-06-16 11:32] – [Idee Code] scatalit:csharp_oop_sca [2025-11-10 12:17] (aktuell) sca
Zeile 16: Zeile 16:
  
    1. Erstelle ein neues **C#-Konsolen-Programm**. Nenne es z.B. *MathVector*\\ \\    1. Erstelle ein neues **C#-Konsolen-Programm**. Nenne es z.B. *MathVector*\\ \\
-   1. Erstelle darin eine **neue Klasse** *Vector* in einem neuen File (pro Klasse ein .cs File). Klicke dazu im Projektmappen-Explorer mit rechts auf den Namen der Solution -> Hinzufügen -> Klasse\\ \\+   1. Erstelle darin eine **neue Klasse** *Vector* in einem neuen File (pro Klasse ein .cs File). 
 +     1. VSCode: Einfach neues File erstellen. 
 +     1. VS: Klicke dazu im Projektmappen-Explorer mit rechts auf den Namen der Solution -> Hinzufügen -> Klasse\\ \\
    1. Erstelle einen **Konstruktor** in der Vector-Klasse. Shortcut: ctor + TAB.\\ \\    1. Erstelle einen **Konstruktor** in der Vector-Klasse. Shortcut: ctor + TAB.\\ \\
    1. Ein Vector soll dann in *Program.cs* mithilfe eines Double-Arrays definiert werden können: `Vector v = new Vector(new double[] { 1, 2, 3 });`\\ \\    1. Ein Vector soll dann in *Program.cs* mithilfe eines Double-Arrays definiert werden können: `Vector v = new Vector(new double[] { 1, 2, 3 });`\\ \\
Zeile 226: Zeile 228:
 ===== - Auftrag: Simulation des N-Body-Problems mit MonoGame ===== ===== - Auftrag: Simulation des N-Body-Problems mit MonoGame =====
  
-**Ziel:** Schreibe mit C# und MonoGames eine Simulation der **Orbits von $N$ Himmelskörpern**, die sich gegenseitig mittels des Newton'schen Gravitationsgesetztes anziehen. Programmiere deinen Code schön und strikt **objektorientiert**.+**Ziel:** Schreibe mit C# und MonoGames eine Simulation der **Orbits von $N$ Himmelskörpern**, die sich gegenseitig mittels des Newton'schen Gravitationsgesetztes anziehen. Programmiere deinen Code schön und strikt **objektorientiert**. Natürlich soll dabei die eigene **Vektor-Klasse** so viel wie möglich verwendet werden.
  
 Tipps: Tipps:
Zeile 240: Zeile 242:
 Da aber alle anderen $N-1$ Himmelskörper eine solche Gravitationskraft auswirken, müssen sämtliche einzelnen Kraftvektoren aufsummiert werden (Superpositionsprinzip), die **resultierende Kraft** ist dann also: Da aber alle anderen $N-1$ Himmelskörper eine solche Gravitationskraft auswirken, müssen sämtliche einzelnen Kraftvektoren aufsummiert werden (Superpositionsprinzip), die **resultierende Kraft** ist dann also:
 $$\vec{F}_{i} = G m_i \sum_{k=1,k\neq i}^N m_k \frac{\vec{r}_k-\vec{r}_i}{|\vec{r}_k-\vec{r}_i|^3}$$ $$\vec{F}_{i} = G m_i \sum_{k=1,k\neq i}^N m_k \frac{\vec{r}_k-\vec{r}_i}{|\vec{r}_k-\vec{r}_i|^3}$$
 +
 +Ein Problem, das oft auftaucht, ist das folgende: Kommen sich zwei Massen sehr nah, so wird $|\vec{r}_k-\vec{r}_i|^3$ extrem klein. Dadurch wird die Kraft sehr gross und eine Masse kann dann regelrecht aus dem Bildschirm geschleudert werden. Dies soll verhindert werden. Dazu addiert man dem Nenner einen kleinen konstanten *Softening-Term* $s$:
 +$$\vec{F}_{i} = G m_i \sum_{k=1,k\neq i}^N m_k \frac{\vec{r}_k-\vec{r}_i}{(|\vec{r}_k-\vec{r}_i| + s)^3}$$
  
 ==== Idee Code ==== ==== Idee Code ====
Zeile 252: Zeile 257:
    1. Mit dem neuen Geschwindigkeitsvektor wird nun der Positionsvektor updated: $$\vec{x\_i} \rightarrow \vec{x\_i} + \Delta t \cdot \vec{v\_i}$$    1. Mit dem neuen Geschwindigkeitsvektor wird nun der Positionsvektor updated: $$\vec{x\_i} \rightarrow \vec{x\_i} + \Delta t \cdot \vec{v\_i}$$
  
-**Kontrolle:** Um zu kontrollieren, ob der Code sich richtig verhält, kann man zu jedem Zeitpunkt den **Schwerpunkt** des Gesamtsystems (alle Himmelskörper zusammen) betrachten. Der Schwerpunkt muss **unbeschleunigt** sein, er muss also entweder in Ruhe sein oder sich mit konstanter Geschwindigkeit entlang einer Geraden bewegen. Wird der Schwerpunkt schneller oder langsam oder bewegt er sich auf einer gekrümmten Bahn, so muss ein Fehler vorliegen. Wie der Schwerpunkt von einem solchen System (genannt 'Diskrete Massenverteilung'berechnet wird, kann im **[[https://sca.ksr.ch/lib/exe/fetch.php?media=pham_physik_sca:pham_statik_01_schwerpunkt.pdf|PHAM Dossier zum Schwerpunkt]]** nachgeschlagen werden.+**Kontrolle:** Um zu kontrollieren, ob der Code sich richtig verhält, kann man zu jedem Zeitpunkt den **Schwerpunkt** des Gesamtsystems (alle Himmelskörper zusammen) betrachten. Der Schwerpunkt muss **unbeschleunigt** sein, er muss also entweder in Ruhe sein oder sich mit konstanter Geschwindigkeit entlang einer Geraden bewegen. Wird der Schwerpunkt schneller oder langsam oder bewegt er sich auf einer gekrümmten Bahn, so muss ein Fehler vorliegen. Wie der Schwerpunkt berechnet wird, kann im **[[https://sca.ksr.ch/lib/exe/fetch.php?media=pham_physik_sca:pham_statik_01_schwerpunkt.pdf|PHAM Dossier zum Schwerpunkt (Siehe Formel unter 'Diskrete Massenverteilung')]]** nachgeschlagen werden.
  
  • talit/csharp_oop_sca.1750073541.txt.gz
  • Zuletzt geändert: 2025-06-16 11:32
  • von sca