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:53] – [Physik] sca | talit:csharp_oop_sca [2025-06-16 14:47] (aktuell) – [Physik] sca | ||
---|---|---|---|
Zeile 226: | Zeile 226: | ||
===== - 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 241: | ||
$$\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 des Himmelskörpers zu updaten: $$\vec{v\_i} \rightarrow \vec{v\_i} + \Delta t \cdot \vec{a\_i}$$ Dabei ist $\Delta t$ ein kleiner Zeitschritt: | + | |
- | 1. Mit dem neuen Geschwindigkeitsvektor wird nun der Positionsvektor updated: $$\vec{x\_i} \rightarrow \vec{x\_i} + \Delta t \cdot \vec{v\_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: | ||