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-06-07 15:18] – [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}}
  
-** Weitere Möglichkeiten ** +==== Physics ==== 
-  * Collisions+{{ :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)     * Figures erhalten eine BoundingBox (containing Rectangle)
-    * Scene untersucht für alle Figures, ob sie sich berühren und führt die Kollision aus.+    * 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.1686151103.txt.gz
  • Zuletzt geändert: 2023-06-07 15:18
  • von hof