AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Schwerkraft wirkt auf Objekt

Ein Thema von Antigo · begonnen am 26. Aug 2006 · letzter Beitrag vom 4. Sep 2006
Antwort Antwort
Antigo

Registriert seit: 14. Mär 2005
274 Beiträge
 
#1

Re: Schwerkraft wirkt auf Objekt

  Alt 26. Aug 2006, 18:07
OK ich schildere mal die Überlegung die hinter meinem Programm steckt:

Ich möchte eine Kugel möglichst realistisch fliegen lassen. Dabei rechne ich mit Vektoren. Es gibt Schwerkraft, Wind Strömungswiderstand usw.
Erst habe ich nur mit Geschwindigkeitsvektoren gerechnet. Dann aber wollte ich den Strömungswiderstand mit einbeziehen, nur leider ist das eine KRaft, die der Bewegung des Objekts entgegenwirkt.

Also hab ich mich dazu entschlossen, mit Kraftvektoren zu rechnen.

DIe Grundüberlegung ist, dass F=m*a ist. a=v/t oder auch a=deltaV/deltaT.
Daher => F=m*deltaV/deltaT

SO jetzt habe ich einen Timer der aufgerufen wird. Hier gucke ich wieviel Zeit seit dem letzten Afruf vergangen ist. Das ist deltaT (in Sekunden).

Jetzt verrechne ich den Kraftvektor, der auf den Ball wirkt mit dem Schwerkraftvektor (den Strömungswiderstand und den Wind lasse ich erstmal weg). Das heisst Ich rechne Kraftvektor+(deltaT*Schwerkraftvektor). Das ist mein neuer Kraftvektor der auf den Ball einwirkt.
Jetzt errechne ich den geschwindigkeitsvektor mit dem sich der Ball bewegen soll. Dafür stelle ich die Formel F=m*deltaV/deltaT um so dass ich deltaV=F*deltaT/m habe. Jetzt rechne ich deltaV auf die alte Geschwindigkeit des Balles drauf, berechne seine neue Position und zeichne ihn.

Puh also wenn das jetzt jemand verstanden hat dann =>

hier noch mein Quellcode:
Delphi-Quellcode:

 while not abbruch do begin
    deltat:=gettickcount()-time;


  if deltat>10 then begin
  deltat:=deltat/1000;

  ball.Kraftvektor.addieren(schwerkraft,deltat);
  ball.Kraftvektor.addieren(wind,deltat);

  
  deltav:=Ball.Kraftvektor.gibLaenge*deltat/ball.m;

  ball.v:=ball.v+deltav;

  Position:=Tvektor.create(Ball.Kraftvektor.x1,ball.kraftvektor.x2);

  if position.giblaenge>0 then Position.setzeLaenge(ball.v);

  Ball.x:=Ball.x+Position.x1;
  Ball.y:=Ball.y-position.x2;

  


  Ball.zeichnen(image);

  time:=gettickcount();

  end;
  Application.ProcessMessages;
  end;
So kann mir jetzt jemand sagen ob mein ansatz brauchbar ist oder was?

Ich hoffe nur das ich nicht zuviel mist fabriziert habe.
Michael
"How should I know if it works? That's what beta testers are for. I only coded it."
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz