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-05-10 10:50] – 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** | ||
* 2023-05-24 | * 2023-05-24 | ||
- | * Diese Figur zeichnen können: {{: | + | * Diese Figur zeichnen können: |
+ | * Nötige Canvas Anpassungen kommen noch ins obige Repo rein. | ||
+ | {{: | ||
- | **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/ | ||
{{: | {{: | ||
+ | ==== Physics ==== | ||
+ | {{ : | ||
+ | * Simple Scene: | ||
+ | * 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?) | ||
+ | * Der Körper bewegt sich ohne externen Einflüsse mit einer konstanten Geschwindigkeit ($\frac{m}{s}$). | ||
+ | * 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`). | ||
+ | * `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: | ||
+ | - *Collision Detection*: Erkenne eine Kollision des Gegenstands mit der Wand. | ||
+ | - *Mirroring*: | ||
+ | - *Attenuation*: | ||
+ | * 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}$. | ||
+ | * Die Änderung der Geschwindigkeit berechnet sich also aus `elapsedSeconds * gravitational_acceleration`. | ||
+ | * Oder `speed.Components[1] += elapsedSeconds * gravitational_acceleration` (angenommen, | ||
+ | * Medium: | ||
+ | * In unserer Simulation verhalten sich Seifenblase, | ||
+ | * *Tipp*: im Vakuum wäre dies tatsächlich der Fall... | ||
+ | * 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 | ||
+ | * Interpretiere z.B. einen Kreis als Kugel. | ||
+ | * Triff Annahmen für die Dichte von Körper und Medium ($\frac{kg}{m^3}$). | ||
+ | * [[wpde> | ||
+ | * Führe eine Term für den Widerstand in die Geschwindigkeitsberechung ein! | ||
+ | * Experimentiere mit dem Faktor (dem [[wpde> | ||
+ | * [[wpde> | ||
+ | * General Collisions | ||
+ | * Figures erhalten eine BoundingBox (containing Rectangle) | ||
+ | * Scene untersucht für alle möglichen Paare von Körpern, ob sie sich berühren und führt die Kollision aus. | ||