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-03 14:48] – [Zusatzaufgaben] hof | talit:csharp_oop [2023-06-14 05:08] (aktuell) – [Physics] hof | ||
---|---|---|---|
Zeile 39: | Zeile 39: | ||
===== Zusatzaufgaben ===== | ===== Zusatzaufgaben ===== | ||
- | |||
- | |||
- | 1. Verwende 2D-Vektoren, | ||
- | 1. Ideen für Erweiterungen: | ||
- | 1. Mehr Figuren (`Circle`... [[https:// | ||
- | 1. 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?) | ||
- | |||
1. Für 3er Vektoren soll nun auch das **Vektorprodukt** berechnet werden können. [[https:// | 1. Für 3er Vektoren soll nun auch das **Vektorprodukt** berechnet werden können. [[https:// | ||
Zeile 51: | Zeile 44: | ||
1. Erweitere deine Klasse mit weiteren sinnvollen Methoden usw.\\ \\ | 1. Erweitere deine Klasse mit weiteren sinnvollen Methoden usw.\\ \\ | ||
1. Falls du sehr motiviert bist, könntest du eine Klasse *Matrix* definieren, mit der man Matrizen-Rechnungen durchführen kann. | 1. Falls du sehr motiviert bist, könntest du eine Klasse *Matrix* definieren, mit der man Matrizen-Rechnungen durchführen kann. | ||
+ | |||
+ | ===== 2D-Drawing ===== | ||
+ | |||
+ | Ziel dieses Projekts: eine 2D-Zeichen-Bibliothek mit OO in C# schreiben, die es erlaubt, eine Zeichnung aus verschiedenen Objekten zu kombinieren und als Bild oder am Bildschirm auszugeben. | ||
+ | |||
+ | Dazu benötigen wir: | ||
+ | * eine solide 2D-Vektor Klasse (s.o.) | ||
+ | * eine Hierarchie von 2D-Figuren (Figure, Polygon, Circle, Oval...) | ||
+ | * 2D-Figuren sollen Eigenschaften haben wie: | ||
+ | * Stroke (Rand: Farbe, Breite, Strichart: dashed / solid) | ||
+ | * Fill (Füllung: Farbe inkl. Transparenz) | ||
+ | * eine Canvas (Leinwand), auf der die Figuren gezeichnet werden. | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | **Hausaufgaben** | ||
+ | * 2023-05-24 | ||
+ | * Diese Figur zeichnen können: | ||
+ | * Nötige Canvas Anpassungen kommen noch ins obige Repo rein. | ||
+ | | ||
+ | |||
+ | ==== Ideen für Erweiterungen ==== | ||
+ | * Mehr Figuren (`Circle`... [[https:// | ||
+ | * 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. | ||