AGB  ·  Datenschutz  ·  Impressum  







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

Timerproblem

Ein Thema von rajuneon · begonnen am 30. Mär 2009 · letzter Beitrag vom 30. Mär 2009
Antwort Antwort
rajuneon
(Gast)

n/a Beiträge
 
#1

Timerproblem

  Alt 30. Mär 2009, 12:17
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:
vx := vx + (ax * (interv/1000)); interv/1000 = dt
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#2

Re: Timerproblem

  Alt 30. Mär 2009, 13:42
wieso willst du die kurve über einen Timer zeichnen, mach das doch über eine while schleife
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
rajuneon
(Gast)

n/a Beiträge
 
#3

Re: Timerproblem

  Alt 30. Mär 2009, 13:46
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.
  Mit Zitat antworten Zitat
SimStar001

Registriert seit: 18. Jan 2008
594 Beiträge
 
#4

Re: Timerproblem

  Alt 30. Mär 2009, 15:08
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.
  Mit Zitat antworten Zitat
rajuneon
(Gast)

n/a Beiträge
 
#5

Re: Timerproblem

  Alt 30. Mär 2009, 15:19
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?
  Mit Zitat antworten Zitat
SimStar001

Registriert seit: 18. Jan 2008
594 Beiträge
 
#6

Re: Timerproblem

  Alt 30. Mär 2009, 15:26
OK, dann würde ichs auch so amchen, kannste bitte mal deinen code posten? Ich steige noch nicht ganz hinter das Problem.
  Mit Zitat antworten Zitat
rajuneon
(Gast)

n/a Beiträge
 
#7

Re: Timerproblem

  Alt 30. Mär 2009, 15:37
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 (HIER)
Ist eigentlich relativ einfach. Aber wie gesagt...ich krieg immer andere Werte raus...(siehe oben)
  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 18:50 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