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:56] – [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 234: | Zeile 240: | ||
Da aber alle anderen $N-1$ Himmelskörper eine solche Gravitationskraft auswirken, müssen sämtliche einzelnen Kraftvektoren aufsummiert werden (Superpositionsprinzip), | Da aber alle anderen $N-1$ Himmelskörper eine solche Gravitationskraft auswirken, müssen sämtliche einzelnen Kraftvektoren aufsummiert werden (Superpositionsprinzip), | ||
$$\vec{F}_{i} = G m_i \sum_{k=1, | $$\vec{F}_{i} = G m_i \sum_{k=1, | ||
+ | |||
+ | 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, | ||
+ | |||
+ | ==== Idee Code ==== | ||
Um die Bewegung der Himmelskörper zu simulieren, legt man die **Anfangsbedingungen (Initial Conditions)** fest: Anfängliche Position $\vec{r}\_i$ und Geschwindigkeit $\vec{v}\_i$ (und natürlich auch Masse) von jedem Himmelkörper $i$. | Um die Bewegung der Himmelskörper zu simulieren, legt man die **Anfangsbedingungen (Initial Conditions)** fest: Anfängliche Position $\vec{r}\_i$ und Geschwindigkeit $\vec{v}\_i$ (und natürlich auch Masse) von jedem Himmelkörper $i$. | ||
Zeile 243: | Zeile 254: | ||
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. 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}$$ | 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 (MVC)** Muster: | ||
- | |||
+ | **Kontrolle: | ||