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 [2023-06-12 12:43] – [Physics] hof | talit:csharp_oop [2023-06-14 05:08] (aktuell) – [Physics] hof | ||
---|---|---|---|
Zeile 57: | Zeile 57: | ||
* eine Canvas (Leinwand), auf der die Figuren gezeichnet werden. | * eine Canvas (Leinwand), auf der die Figuren gezeichnet werden. | ||
- | [[https:// | + | [[https:// |
**Hausaufgaben** | **Hausaufgaben** | ||
Zeile 67: | Zeile 67: | ||
==== Ideen für Erweiterungen ==== | ==== Ideen für Erweiterungen ==== | ||
* Mehr Figuren (`Circle`... [[https:// | * Mehr Figuren (`Circle`... [[https:// | ||
- | * Eine `public void move(Vector v)` Methode auf `Figure`, die es erlaubt, jede Figur zu bewegen (Wie? Zum Beispiel, indem alle Punkte der Figur bewegt werden - vielleicht benötigt ja `Vector` eine `move` Methode?) | ||
* 2D-Figuren kombinieren (add/ | * 2D-Figuren kombinieren (add/ | ||
Zeile 74: | Zeile 73: | ||
==== Physics ==== | ==== Physics ==== | ||
{{ : | {{ : | ||
- | * Der Körper bewegt sich ohne externen Einflüsse mit einer konstanten Geschwindigkeit ($\frac{m}{s}$). | + | |
+ | * Figures platzieren | ||
+ | * https:// | ||
+ | * Bewegung! | ||
+ | * Eine `public void move(Vector v)` Methode auf `Figure`, die es erlaubt, jede Figur zu bewegen (Wie? Zum Beispiel, indem alle Punkte der Figur bewegt werden - vielleicht benötigt ja `Vector` eine `move` Methode?) | ||
+ | | ||
* Achtung, die Geschwindikeit ist ein Vector-Wert! | * Achtung, die Geschwindikeit ist ein Vector-Wert! | ||
* In jedem Schritt berechnet sich die Translation aus der Geschwindigkeit und der seit dem letzten Update vergangenen Zeit (`elapsedSeconds`). | * In jedem Schritt berechnet sich die Translation aus der Geschwindigkeit und der seit dem letzten Update vergangenen Zeit (`elapsedSeconds`). | ||
+ | * `Vector translation = speed * elapsedSeconds; | ||
+ | * Einheiten: | ||
+ | * Achtung, wenn der Speed die Einheit $\frac{m}{s}$ hat, müssen wir die Meter irgendwie in Pixel umwandeln, damit das ganze Sinn macht. | ||
+ | * Eine genaue Umrechnung ist nicht nötig, wir können davon ausgehen, dass 1m ca. 6000 Pixel entspricht (bei 150dpi - dots per inch). | ||
* Lasse deine sich bewegenden Figures mit den Wänden interagieren: | * Lasse deine sich bewegenden Figures mit den Wänden interagieren: | ||
- *Collision Detection*: Erkenne eine Kollision des Gegenstands mit der Wand. | - *Collision Detection*: Erkenne eine Kollision des Gegenstands mit der Wand. | ||
Zeile 82: | Zeile 90: | ||
- *Attenuation*: | - *Attenuation*: | ||
* Gravitation: | * Gravitation: | ||
- | * In jedem Update-Schritt sollen die beweglichen Körper eine Kraft senkrecht nach unten wirken, die die Figure beschleunigt. Die Beschleunigung ist auf der Erdoberfläche $9.81 \frac{m}{s^2}$. | + | * In jedem Update-Schritt sollen die beweglichen Körper eine Kraft senkrecht nach unten wirken, die die Figure beschleunigt. |
+ | * Die Beschleunigung ist auf der Erdoberfläche $9.81 \frac{m}{s^2}$. | ||
+ | * Die Änderung der Geschwindigkeit berechnet sich also aus `elapsedSeconds * gravitational_acceleration`. | ||
+ | * Oder `speed.Components[1] += elapsedSeconds * gravitational_acceleration` (angenommen, | ||
* Medium: | * Medium: | ||
* In unserer Simulation verhalten sich Seifenblase, | * In unserer Simulation verhalten sich Seifenblase, | ||
- | | + | |
* Wenn wir davon ausgehen, dass unsere Box mit einem Medium (Luft, Wasser...) gefüllt ist, so führen Widerstand und Auftrieb zu einer Differenzierung. | * Wenn wir davon ausgehen, dass unsere Box mit einem Medium (Luft, Wasser...) gefüllt ist, so führen Widerstand und Auftrieb zu einer Differenzierung. | ||
* Triff Annahmen für das Volumen und die Masse des Körpers | * Triff Annahmen für das Volumen und die Masse des Körpers |