Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
| talit:csharp_oop_sca [2025-06-16 10:13] – [Physik] sca | talit:csharp_oop_sca [2025-11-10 12:17] (aktuell) – sca | ||
|---|---|---|---|
| Zeile 16: | Zeile 16: | ||
| 1. Erstelle ein neues **C# | 1. Erstelle ein neues **C# | ||
| - | 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: Orbits von $N$ Himmelskörpern, | + | **Ziel:** Schreibe mit C# und MonoGames eine Simulation der **Orbits von $N$ Himmelskörpern**, die sich gegenseitig mittels des Newton' |
| + | |||
| + | Tipps: | ||
| + | |||
| + | * Starte mit dem **2-Körperproblem** und erweitere es dann zu beliebig vielen Körpern. | ||
| + | * Machst du eine strikte Trennung von **Model und View**, kannst du deinen Code später besser wiederverwenden. | ||
| ==== Physik ==== | ==== Physik ==== | ||
| Zeile 235: | Zeile 243: | ||
| $$\vec{F}_{i} = G m_i \sum_{k=1, | $$\vec{F}_{i} = G m_i \sum_{k=1, | ||
| - | Um die Bewegung von Himmelskörper | + | 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 |
| + | $$\vec{F}_{i} = G m_i \sum_{k=1, | ||
| - | 1. Lege die **Initial Conditions** fest: Anfängliche Position $\vec{r}\_i$ und Geschwindigkeit $\vec{v}\_i$. | + | ==== Idee Code ==== |
| - | 1. Berechne mithilfe der Formel oben die **resultierende Kraft**, die auf den Himmelskörper wirkt. | + | |
| - | 1. Berechne daraus die tatsächliche **Beschleunigung** des Himmelskörpers: | + | |
| - | 1. Nutze diese, um den Geschwindigkeitsvektor und Positionsvektor des Himmelskörpers zu updaten: $$\vec{v\_i} \rightarrow \vec{v\_i} + \Delta t \cdot \vec{a\_i}$$ | + | |
| - | ==== Struktur des Projekts | + | |
| - | Strukturiere dein Projekt nach dem **Model-View-Controller | + | Um die Bewegung der Himmelskörper zu simulieren, legt man die **Anfangsbedingungen |
| + | Im Code geht man dann in einer Schleife alle $N$ Himmelskörper durch. In jedem Durchgang wird dann die Position und Geschwindigkeit von jedem Himmelskörper $i$ updated: | ||
| + | |||
| + | 1. Berechne mithilfe der Formel oben die **resultierende Kraft**, die auf den Himmelskörper $i$ wirkt. | ||
| + | 1. Berechne daraus die tatsächliche **Beschleunigung** des Himmelskörpers: | ||
| + | 1. Nutze diese, um den Geschwindigkeitsvektor des Himmelskörpers zu updaten: $$\vec{v\_i} \rightarrow \vec{v\_i} + \Delta t \cdot \vec{a\_i}$$ Dabei ist $\Delta t$ ein kleiner konstanter Zeitschritt: | ||
| + | 1. Mit dem neuen Geschwindigkeitsvektor wird nun der Positionsvektor updated: $$\vec{x\_i} \rightarrow \vec{x\_i} + \Delta t \cdot \vec{v\_i}$$ | ||
| + | **Kontrolle: | ||