Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
talit:csharp_oop [2023-05-10 10:51] – [2D-Drawing] hoftalit: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://github.com/tkilla77/ksr_talit_oopcs|Dieses Repo]] hilft dir beim Start.+[[https://github.com/tkilla77/ksr_talit_oopcs/tree/simple|Dieses Repo]] hilft dir beim Start.
  
 **Hausaufgaben** **Hausaufgaben**
Zeile 65: Zeile 65:
  {{:talit:pasted:20230510-125031.png?nolink&400}}  {{:talit:pasted:20230510-125031.png?nolink&400}}
  
-**Ideen für Erweiterungen**+==== Ideen für Erweiterungen ====
   * Mehr Figuren (`Circle`... [[https://www.researchgate.net/figure/The-hierarchy-of-the-Shape-class-and-its-subclasses_fig2_269038030|noch mehr]])   * Mehr Figuren (`Circle`... [[https://www.researchgate.net/figure/The-hierarchy-of-the-Shape-class-and-its-subclasses_fig2_269038030|noch mehr]])
-  * 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/subtract von Flächen): kannst du dieses Gemälde malen?   * 2D-Figuren kombinieren (add/subtract von Flächen): kannst du dieses Gemälde malen?
  
 {{:talit:pasted:20230510-124710.png?nolink&400}} {{:talit:pasted:20230510-124710.png?nolink&400}}
  
 +==== Physics ====
 +{{ :talit:physics.mp4|}}
 +  * Simple Scene:
 +    * Figures platzieren
 +    * https://github.com/tkilla77/ksr_talit_oopcs/tree/simple
 +  * 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;` - dafür muss unsere `Vector`-Klasse die Skalarmultiplikation unterstützen.
 +    * 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*: Ändere das Vorzeichen die Geschwindigkeit in der Kollisionsrichtung.
 +    - *Attenuation*: Ist die Kollision nicht perfekt elastisch, so geht ein Anteil der Energie beim Aufprall verloren.
 +  * 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, die Y-Komponente ist die Richtung der Gravitation).
 +  * Medium:
 +    * In unserer Simulation verhalten sich Seifenblase, Ping-Pong-Ball und Stahlkugel genau gleich, weshalb?
 +      * *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>Strömungswiderstand]]: Ist annähernd proportional zum Quadrat der Geschwindigkeit $v$, und proportional zum Querschnitt des Körpers $A$ sowie der Dichte des Mediums $\rho$: $F_\mathrm{W} = c_\mathrm{W} \, A \, \frac{1}{2} \, \rho v^2$
 +        * Führe eine Term für den Widerstand in die Geschwindigkeitsberechung ein!
 +        * Experimentiere mit dem Faktor (dem [[wpde>Strömungswiderstandskoeffizient]] $c_\mathrm{W}$).
 +      * [[wpde>Statischer_Auftrieb|Statischer Auftrieb]]: Dieser ist proportional zur Menge des verdrängten Mediums, was wir aus dem Körpervolumen und der Dichte des Mediums berechnen können..
 +  * 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.
  
  • talit/csharp_oop.1683715890.txt.gz
  • Zuletzt geändert: 2023-05-10 10:51
  • von hof