Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Schwerkraft wirkt auf Objekt (https://www.delphipraxis.net/75892-schwerkraft-wirkt-auf-objekt.html)

Antigo 26. Aug 2006 19:09

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! ;)

markusj 27. Aug 2006 11:19

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

Antigo 27. Aug 2006 11:34

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 :(

markusj 27. Aug 2006 13:18

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

Antigo 27. Aug 2006 14:25

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.

DGL-luke 27. Aug 2006 15:13

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.

Jelly 27. Aug 2006 15:50

Re: Schwerkraft wirkt auf Objekt
 
Zitat:

Zitat von JasonDX
Zitat:

Zitat von Antigo
G=m*g. Demnach müsste eine schwerere Kugel schneller fallen. Oder muss ich hier noch Sache wie trägheit der Masse berücksichtigen

Nein, die Traegheit hat wenig damit zu tun.

Doch, es ist genau die Trägheit, warum eine Feder und ein Stein gleich schnell fallen. Beim Stein ist die Gravitationskraft G=mg zwar entsprechend grösser als bei der Feder, aber wegen der höheren Masse des Steins ist dieser auch schwerer zu beschleunigen. Genau das ist die Trägheit.

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]

Jelly 27. Aug 2006 16:01

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:

Zitat von markusj
Fg = m*g
Freib = 0,5*cw*A*roh*v^2

Und Kräfte addiert man, und die Summe der Kräfte ist IMMER gleich der Masse mal Beschleunigung. Und da die Reibungskraft entgegenwirkt, wird da Vorzeichen gewechselt:

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.

Antigo 30. Aug 2006 18:56

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:
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;
Das meiste ist selbsterklärend. Die Funktion giblaenge gibt den Betrag eines Vektors zurück. DIe Prozedor setzeLaenge legt den Betrag fest.


Wie bisher auch, meine Frage: warum ist das so? Ist meine Berechnungsart falschß Ich hoffe jemand hat eine Antwort


edit: COde überarbeitet

markusj 30. Aug 2006 20:15

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.
Seite 2 von 3     12 3      

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