Re: Schwerkraft wirkt auf Objekt
vielen Dank für den Beweis :)
Bei meinem Programm ist es bereits so, dass 2 Objekte mit verschiedenen Massen gleich schnell fallen. Das heisst ich habs bereits richtig programmiert, nur ein paar Sachen (in meinem Kopf) durcheinander geworfen. ;) Das Problem ist, allerdings, dass die Zeit die ein Objekt braucht um zu fallen, nicht mit der Formel s = 1/2 * g * t² übereinstimmt. Nur ich weiss nicht warum. Daher wollte ich auch nachfragen ob mein Ansatz überhaupt vernünftig ist, also dass F=m*deltav/deltat. edit: vielleicht liegt der Fehler darin: Ich gehe davon aus, dass jede Sekunde einmal der Schwerkraftsvektor auf den Kraftvektor des Balles wirkt. Daher addiere ich immer den Bruchteil des Schwerkraftsvektor (abhängig von der vergangenen Zeit deltaT) auf den Kraftvektor des Balles. DIe Schwerkraft wirk aber doch die ganze Zeit auf den Ball, oder nicht? Wie berechne ich das also? Die Problematik liegt ja darin, dass ich nicht weiss wann ich den Schwerkraftsvektor auf den Kraftvektor des Balles rechnen muss. DIe Schwerkraft wirkt eigentlich immer. Ich kann das also sowieso nur näherungsweise machen, indem ich kleine Schritte mache und auf den Ballvektor den Schwerkraftsvektor draufrechne. Rechne ich aber bei jedem Schleifendurchlauf den kompletten Schwerkraftsvektor auf den Ballvektor, würde die Flugbahn immer anders aussehen, je nachdem wie schnell der PC und damit der Schleifendurchlauf ist. Hilfe! ;) |
Re: Schwerkraft wirkt auf Objekt
1. Der Schwerkraftvektor ist IMMER Konstant, nämlich (vereinfacht) Fg = m*g
2. Der Geschwindigkeitsvektor ergibt sich aus a*t und a = g (9,81 ...) Diese Formel gibt dir die Geschwindigkeit zum aktuellen Zeitpunkt t zurück, wenn du die Kugel bei t=0 fallen lässt. 3. Die zurückgelegte Strecke s = 0,5*a*t^2 wobei a = g (siehe oben) Du kannst das nicht iterativ mit delta_t = 1 Sekunde berechnen, dieses Schema ist viel zu grob. Verwende die Formeln oben! mfG Markus |
Re: Schwerkraft wirkt auf Objekt
Leider kann ich wiegesagt nicht einfach Erdbeschleunigung * >Vergangene Zeit seit loslassen< rechenen, da ich auch noch einen Windvektor miteinbringen will. Durch diesen ändert sich natürlich die Beschleunigung a die auf den Ball wirkt, und zusätzlich verändert sich auch noch die Richtung in die der Ball beschleunigt wird.
Was ich brauche ist irgendeine vernünftige Verrechnung des Kraftvektors des Balles und des Schwerkraftsvektors. Es ist klar das der Schwerkraftsvektor IMMER wirkt. Und mir ist jetzt auch klar geworden das ich nicht einfach sagen kann der wirkt einmal pro Sekunde und abhängig von der vergangenen Zeit rechne ich nur mit einem Bruchteil des Schwerkraftvektors. Aber irgendwie muss ich ja schon mit einem Bruchteil dieses Vektors rechnen. Denn würde Ich einen Timer haben, der einmal pro Sekunde aufgerufen wird, würde auch nur einmal pro Sekunde der Schwerkraftvektor auf den Kraftvektor des Balles gerechnet. Dementsprechend würde bei einem Timer der hundert mal pro Sekunde aufgerufen würde, auch hundertmal der Vektor draufaddiert. Das das Ergebnis, sich sowas von arg unterscheidet dürfte klar sein ;) Irgendwie muss das aber möglich sein, mir fehlt nur der Ansatz :( |
Re: Schwerkraft wirkt auf Objekt
Irrtum, du rechnest hier mit Vektoren, d.H., du kannst dir die Y-Komponente einfach mal ignorieren, dann mittels
F= m*a und a*t = v berechnen, welche Geschwindigkeit deine Kugel in X-Richtung erfährt. Du berechnest also nur die X-Komponente iterativ und speicherst die gegenwärtige Geschwindigkeit in einer Variable für den Teilvektor X. Dann berechnest du mit dem Zeitpunkt seit Fallenlassen den aktuellen Y-Vektor und machst eine Vektoraddition von VektorX und VektorY und erhältst deinen aktuellen resultierenden Vektor. mfG Markus |
Re: Schwerkraft wirkt auf Objekt
ist ja alles schön und gut, aber ich will und kann nicht mit der Zeit seit fallen lassen rechnen. SPäter will ich einen Ball auch nach oben werden, vom Wind erfassen lassen, und dann nach unten fallen lassen. Da ist nix mehr mit Zeit seit fallen lassen. Vielleicht bin ich ja auch aufm Holzweg, aber ich komme irgendwie nicht weiter.
|
Re: Schwerkraft wirkt auf Objekt
Du könntest eine Liste der wirkenden Kräfte erstellen und daraus zu einem gegebenen Zeitpunkt t alle zwischen t0 und t auftretenden Beschleunigungen berechnen... glaube ich...
ansonsten: http://newtondynamics.com - OS-Physikengine mit Delphi-Headern. |
Re: Schwerkraft wirkt auf Objekt
Zitat:
Oder mal andersrum. Wenn du mit gleicher Kraft auf einen Gegenstand einwirkst, so lässt sich ein leichter Gegenstand schneller beschleunigen als ein schwerer. Zieh ein Auto und zieh einen LKW, und Du wirst die Trägheit kennenlernen :mrgreen: [/quote] |
Re: Schwerkraft wirkt auf Objekt
Ich werd dann aber auch noch mal hier meinen Senf dazugeben. Ich les immer nur die Formel
F = mg und v = at Das reicht aber nicht aus, um Reibungseffekt mit einzubeziehen. Der einzig vernünftige Weg ist der von markusj vorgeschlagen: Zitat:
mg - 0,5*cw*A*roh*v^2 = ma Bischen vereinfach kann man das schon noch, weil ja 0,5*cw*A*roh eine Konstante ist. Ich nenn die mal C. mg - C*v^2 = ma Die Gleichung gilt es zu lösen, und hier darf leider nicht einfach gesagt werden, dass v=at ist. Das Einzige was gilt ist dass a die zeitliche Ableitung von v ist, also a=dv/dt. Aber um die Differentialgleichung zu lösen, hab ich jetzt keine Lust. Nur eins vorweg: Die Lösung der Gleichung wird bischen komplierter aussehen als s=1/2at^2. |
Re: Schwerkraft wirkt auf Objekt
Liste der Anhänge anzeigen (Anzahl: 1)
sry das ich mich solange nicht mehr gemeldet habe. Danke nochmal für alle bisherigen ANtworten, aber mein Problem liegt noch ganz woanders. Inzwischen habe ich die Berechnung verändert, und der Ball fällt auch in der Zeit herunter in der er es soll. Werfe ich den Ball jedoch schräg nach oben, so fliegt er erst gerade aus, macht dann eine scharfe Kurve, und fällt wieder runter. Screenshot ist angehangen.
Hier mal der Code der durchlaufen wird:
Delphi-Quellcode:
Das meiste ist selbsterklärend. Die Funktion giblaenge gibt den Betrag eines Vektors zurück. DIe Prozedor setzeLaenge legt den Betrag fest.
var deltav,deltat,m,F,s,a:double;
position,V:Tvektor; i : integer; begin time:=gettickcount(); while not abbruch do begin deltaT:=(gettickcount()-time)/1000; if deltat>=0.001 then begin berechnen; //Verrechnet alle Kräfte die auf den Ball wirken. Ergebnis wird in Endvektor gespeichert a:=Endvektor.giblaenge / koerper.m; //BEschleunigung die auf Ball wirkt deltav:=a * deltat; //Geschwindigkeit mit der sich Ball in Richtung der Kraft in der Zeit deltat bewegt V:=Tvektor.create(Endvektor.x1,Endvektor.x2); //Geschwindigkeitsvektor erzeugen der in Richtungder Kraft zeigt v.setzelaenge(deltav); //LÄnge des Geschwindigkeitsvektors setzen koerper.v.addieren(v,1); //Geschwindigkeit die auf Körper wirkt, mit der aktuellen verrechnen (Faktor 1) Position:=Tvektor.create(koerper.v.x1,koerper.v.x2); //Positionvektor (Verschiebung des Balles) erstellen der in Richtung der neeuen Geschwindigkeit zeigt //Wenn Verschiebungsvektor größer Null, dann neue Position des Bales errechnen if position.giblaenge>0 then begin Position.setzeLaenge(deltat * koerper.v.gibLaenge); koerper.x:=koerper.x+Position.x1; koerper.y:=koerper.y-position.x2; end; koerper.zeichnen(form1); end; Application.Processmessages; end; Wie bisher auch, meine Frage: warum ist das so? Ist meine Berechnungsart falschß Ich hoffe jemand hat eine Antwort edit: COde überarbeitet |
Re: Schwerkraft wirkt auf Objekt
Ich kann zwar mit deinem Code NIL anfangen, aber das Bild sieht ... interessant aus.
Normalerweise solltest du eine Wurfparabel bekommen. Der X-Vektor bleibt ja immer gleich, d.h. du veränderst in diesem Fall nur den Y-Vektor um den Geschwindigkeitsbetrag, der in -Y Richtung dazukommt. Dein Graph hat einen etwas extremen Knick, welchen ich aber ohne Angabe von verwendeten Massen und Geschwindigkeiten nicht überprüfen kann. Ich halte es aber für durchaus möglich, dass deine Berechnungen näherungsweise Stimmen. Noch was: Bitte formatiere deinen Source etwas mehr ... Leezeichen kosten nix. mfG Markus EDIT: Versuch mal, deine Schleife durchzusteppen und kontrolliere dabei die Veränderung der einzelenen Werte. Der Geschwindigkeitsvektor X sollte ja nicht berührt werden. Und poste mal deine Parameter! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:43 Uhr. |
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