Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Simulation Freierfall (https://www.delphipraxis.net/105596-simulation-freierfall.html)

Bömmelmütze 25. Dez 2007 16:11


Simulation Freierfall
 
Ich denke mal mein Problem passt hier noch am besten rein:
Ich hab mir von meiner Physiklehrerin aufs Auge drücken lassen, in Delphi ein Programm zu schreiben, das den freinen Fall simuliert. Nun habe ich mir gedacht, das könnte man doch mit einer Großen Bitmap machen (2D reicht ja dafür völlig aus), allerdings bin ich dann gleich zu Anfang daran gescheitert, wie ich 30 mal pro Sekunde die position des "Pixelklotzes" geändert bekomme, bzw. wie überhaupt der Faktor Zeit Einzug in mein Programm finden soll.
Ich würd mich freuen, wenn mir jemand helfen könnte (so schwer hört sich des ja nicht an), wenn der Aufand dadurch geringer wäre, könnte ich auch auf die Bitmap verzichten.
Frohe Weihnachtsfeiertage,
Bömmelmütze

MrKnogge 25. Dez 2007 16:13

Re: Simulation Freierfall
 
Nimm einfach einen Timer.

Gruß

Dax 25. Dez 2007 16:14

Re: Simulation Freierfall
 
Kuck dir mal die Delphi-Referenz durchsuchenTTimer-Komponente an, die ist für simple periodische Vorgänge recht gut geeignet. Was dein Bitmap angeht: das geht natürlich, aber wenn du nur demonstrieren willst, dass etwas, wenn es fällt, immer schneller wird, kannst du auch einfach ein Delphi-Referenz durchsuchenTShape übers Form flitzen lassen.

Jelly 25. Dez 2007 16:47

Re: Simulation Freierfall
 
Timer ja, aber nicht um meine Zeitvariable t zu bestimmen. Dafür würde ich GettickCount nutzen, dessen Wert ich dann in einem Timer periodisch auslese und in meine Ortsgleichung als t einsetze. Für den Timer selbst würde ich das Interval gerade noch so klein wählen, dass der Prozessor es noch packt. Aber als Laufvariable t immer auf GettickCount setzen (oder now von mir aus).

mimi 25. Dez 2007 18:16

Re: Simulation Freierfall
 
Das Problem ist wie genau soll der Freie Fall sein ? so wie in der "Realen Welt ?"

ich würde es so lösen:
Du hast ein großes Bitmap jetzt hast du ein rect das ist dein Anzeige Bildschirm.

Das Objekt Plaziert du einfach oben und lässt es in einem Timer + Zähler Variable einfach fallen.

Wobei es ja immer schneller Fallen muss, weil so ein Objekt wiegt meines Wissens auch.

Du könntest jetzt die Alte Position übermalen und das Objekt an der Neuen Position Zeichnen. Die Aufgabe ist gar nicht so wild.

Du könntest auch nur ein Off-Screen haben das könnte schon reichen, dann wird es nur etwas aufwendiger für dich.
Wenn das Object jetzt Unten ist muss es wieder am anfang gezeichnet werden, aber die Fall geschwindigkeit darf sich nicht ändern.

Ich hoffe du kannst mir Folgen. Das Prinzip ist aufjedenfall ganz einfach. Wenn es sich nur um ein Object Handelt das Fallen soll und nicht um mehrer die auch noch zusammenstoßen sollen.

Jelly 25. Dez 2007 20:44

Re: Simulation Freierfall
 
Zitat:

Zitat von mimi
Das Objekt Plaziert du einfach oben und lässt es in einem Timer + Zähler Variable einfach fallen.

Das ist, find ich, eine etwas schwammige Formulierung. "Einfach fallen lassen"

Zitat:

Zitat von mimi
Wobei es ja immer schneller Fallen muss, weil so ein Objekt wiegt meines Wissens auch.

Es fällt nicht schneller, weil es schwerer ist, sondern weil es durch die Erdanziegung gleichmässig beschleunigt wird. D.h., sofern man Luftwiderstand vernachlässigt, nimmt die Geschwindigkeit linear zu, und zwar gemäss v=gt+v0

Zitat:

Zitat von mimi
Die Aufgabe ist gar nicht so wild.

Und weiter ??

Ich glaube, ich habe mich in meinem letzten Beitrag nicht genau genug ausgedrückt... Sinn der Sache ist es auf jeden Fall die Berechnung und die grafische Darstellung voneinander zu trennen. Also man berechne für einen Zeitpunkt t (und t lässt sich nun aber wirklich leicht aus Gettickcount ausdrücken... muss nur noch auf einen Zeitpunkt 0 normiert werden, welcher nix anderes ist als die Startzeit der Simulation), seine Position x und y auf dem Bildschirm. Da in x-Richtung keine Beschleunigung vorliegt, ist x ganze einfach x=v_x*t+x0. (v_x=Initialgeschwindigtkeit in x-Richtung, x0=x-Position beim Start der Simulation). In y-Richtung liegt nun allerdings eine Beschleunigung vor, und aus obiger Gleichung folgt dann
Code:
v_y=-gt+v0_y
=> y=-1/2*g*t^2-v0_y+y0
Einzige Variable ist auch hier wieder die Zeit t.

Jetzt baust du beide Gleichungen für x und y, welche dir den Ortsvektor r(x,y) geben, entweder in eine beliebige while-Schleife oder in einen Timer. Zu Beginn der Schleife bzw. beim Auslösen des Timers liest du über gettickcount wieder die Systemzeit aus, ziehst davon t0 ab, und hast einen neuen Zeitpunkt t für deine Simulation. Rechne r(t) aus (also jeweils x und y), und du hast einen Punkt, wo sich dein Objekt befindet.

Und erst hier kommt die grafische Darstellung ins Spiel. Wie du das machst, ist eigentlich egal. Ich würde ein Shape oder TPicture einfach neu plazieren. Natürlich muss x und y noch auf Bildschirmkoordinaten normiert werden, aber all das hat nix mehr mit dem freien Fall zu tun, sondern nur noch mit der grafischen Darstellung.

mimi 26. Dez 2007 12:19

Re: Simulation Freierfall
 
Meine Antwort war auch nur für den Grafischen Teil gedacht. Aber da gibt es mehrer Möglichkeiten.

Wird der Freie Fall nicht durch den Luftwiderstand den du erwähnst noch gebremst ?

Jelly 26. Dez 2007 12:23

Re: Simulation Freierfall
 
Zitat:

Zitat von mimi
Wird der Freie Fall nicht durch den Luftwiderstand den du erwähnst noch gebremst ?

Doch, natürlich, und näherungsweise ist die Reibungskraft proportional zu v^2. Dadurch wird die lösung der Differentialgleichung aber erheblich schwerer. Irgendwann ist die Reibungskraft genauso gross wie die Erdanziehung, nur entegengesetztes Vorzeichen. Dann haben wir eine konstante Fallgeschwindigkeit. Aber für die Zeitspanne, wo das Objekt noch nach unten beschleunigt wird, ist die Dgl recht komplex. Ausserdem geht in dem Fall noch die Masse m des Objektes ein, da alle DGl Therme m enthalten, bis auf die Reibungskraft. Dadurch lässt sich m nicht mehr wegkürzen.

EDIT: Hier mal die Lösung bei Wikipedia. Ich denk das wird dann definitiv zu komplex für Schulstoff.

mimi 26. Dez 2007 12:37

Re: Simulation Freierfall
 
Kommt drauf an, wie genau das werden soll...... Wenn man Grenzen Zieht es ist ein Schöner einfacher versuch....

Jelly 26. Dez 2007 12:41

Re: Simulation Freierfall
 
Welche Grenzen willst du denn ziehen?

Letztenendes ist es mit Reibung auch nicht komplizierter, denn die Lösung steht ja bei Wikipedia analytisch. Man muss also nur noch die zusätzlichen Parameter einsetzen, sprich die Masse m und den Reibungskoeffizienten beta. Aber eine Simulation zu schreiben, bei der man die Lösung noch nicht mal kapiert (ich glaub nicht dass ein 16-jähriger Schüler schon mal was von Sinushyperbolikus gehört hat) halte ich für unsinnig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:54 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz