Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Timerproblem (https://www.delphipraxis.net/131748-timerproblem.html)

rajuneon 30. Mär 2009 12:17


Timerproblem
 
Schönen guten Tach!
Ich habe einen Timer, der nach einer if-Abfrage entweder die eine oder die andere Formel durchläuft.
Die erste Formel st gar kein Problem, da hier immer von der gesamten Zeitdifferenz ausgegangen wird. Das heißt, die gezeichnete Kurve wird bei größer werdendem Intervall immer "eckiger", weil das LineTo größere Abstände zu überbrücken hat. Egal.
Das Problem ist die andere Formel: Diese verwendet nicht DeltaT (Zeitdifferenz seit Start), sondern dt (Zeitdifferenz zwischen 2 Messungen)! Wenn ich hier also das Zeitintervall des Timers von 10 auf 1 setze z.B., wird die Kurve auch dementpsrechend langsamer gezeichnet. Wie kann ich den Timer dazu bringen, die Kurve genauso schnell anzuzeigen wie vorher, nur dass dann weniger einzelne Punkte miteinander verbunden werden?

Edit:
Bis jetzt habe ich es eigentlich so gelöst:
Delphi-Quellcode:
vx := vx + (ax * (interv/1000));
interv/1000 = dt

matashen 30. Mär 2009 13:42

Re: Timerproblem
 
wieso willst du die kurve über einen Timer zeichnen, mach das doch über eine while schleife

rajuneon 30. Mär 2009 13:46

Re: Timerproblem
 
Naja, weil die Kurve sozusagen einen "Schweif" hinter dem dargestellten Objekt darstellt. Also muss sie in der gleichen Geschwindigkeit, wie das Objekt (ist eine Simulation eines schrägen Wurfes) fliegt, erscheinen.

SimStar001 30. Mär 2009 15:08

Re: Timerproblem
 
dann mach doch beides in einer schleife...

ich meine beim Schrägen Wurf kannste ja die Zeit, Wurfweite usw. vorher berechnen. und dann kannste dort statt einer while sogar ne for schleife nehmen...

Timer ist für sowas eher ungegeignet, würde ich meinen.

rajuneon 30. Mär 2009 15:19

Re: Timerproblem
 
Beim schrägen Wurf unter Berücksichtigung des Luftwiderstandes kann man eben nicht so einfach die Wurfdauer etc. vorher berechnen ohne nen Haufen Infinitesimalrechnung.
Was ist denn überhaupt mein Fehler? Der User gibt ein gewünschtes Intervall ein. Dies wird eingelesen und dem Timer zugewiesen. In der Timerschleife dann wird die Formel berechnet mit dt, wobei ich als dt intervall/1000 einsetze, weil die formel mit sekunden rechnet. normalerweise müsste eine mit intervall 1 gezeichnete kurve sich erstens mit einer decken, die mit intervall 10 gezeichnet wurde und zweitens müssten die kurven gleich schnell gezeichnet werden. warum klappt beides nicht?

SimStar001 30. Mär 2009 15:26

Re: Timerproblem
 
OK, dann würde ichs auch so amchen, kannste bitte mal deinen code posten? Ich steige noch nicht ganz hinter das Problem.

rajuneon 30. Mär 2009 15:37

Re: Timerproblem
 
Delphi-Quellcode:
procedure TForm1.PlayClick(Sender: TObject); // PLAY-Taste gedrückt
begin
//....
Timer1.Interval := StrToInt(Intervall.Text); // Intervall aus dem Edit dem Timer zuweisen
interv := Timer1.Interval; // das Intervall Behelfsvariable (real) zuweisen
//....
end;
Das ist die Zuweisung des Intervalls in der Play-Button-Procedure.

Und das hier:
Delphi-Quellcode:
Timer1Timer...

    lw := 0.5 * rho * cw * oberfl * (sqr(vx) + sqr(vy)) / 10000; // vx und vy beim ersten Durchlauf noch die Startwerte aus der PLAY-Button-Procedure
      lw := round(lw*1000)/1000;
    winkelbogen := arctan(vy / vx);
      winkel := RadToDeg(winkelbogen);
        winkel := round(winkel*1000)/1000;
    ax := -( cos(winkelbogen) * lw / m);
    ay := (-g) - (sin(winkelbogen) * lw / m);
    vx := vx + (ax * (interv/1000));
      vx := round(vx*1000)/1000;
    vy := vy + (ay * (interv/1000));
      vy := round(vy*1000)/1000;
    v := sqrt((sqr(vx) + sqr(vy)));
      v := round(v*1000)/1000;
    x := x + (vx * (interv/1000));
      x := round(x*1000)/1000;
    y := y + (vy * (interv/1000));
      y := round(y*1000)/1000;
...sind die Formeln die im Timer ablaufen.
Hab ich von Wikipedia :P (HIER)
Ist eigentlich relativ einfach. Aber wie gesagt...ich krieg immer andere Werte raus...(siehe oben)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:24 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