Simulation - Schiefer Wurf



  • Hi 🙂
    Hab folgendes Problem bei der Simulation des Schiefen Wurfes:
    Bin im großen und ganzen eigentlich fertig, d.h. Fallzeit, Wurfweite, funzt schon, der Timer gibt mir zwar die Richtige Fallzeit od. Wurfzeit aus doch ist diese Zeit nicht real, d.h. stopp ich den gesamten Wurf mit einer Stoppuhr händisch mit, fliegt die Kugel in der Simulation um einen Faktor von ca. 1,5 länger als auf meiner Stoppuhr! -.- Eigentlich bin ich ja zufrieden, aber ich würde mich trotzdem freuen wenn irgendwer ne Antwort darauf hätte! Vl. is dass normal, Laufzeitfehler vom Builder und ich habs nur net mitbekommen 😕
    FrAnky 😃



  • Wie jetzt, du wunderst dich warum wenn du eine richtige Kugel wirfst sie net genauso lange brauchst also wenn du es auf dem Rechner simulierst ?
    Wie willst du denn den Kraftvektor im realen Leben exakt bestimmen das du mit xx Newton deine Kugel wirfst ?!?!?


  • Mod

    wir müßten wissen wie du das simulierst um ne meinung bilden zu können was falsch sein könnte.



  • Zuerst einmal danke für eure Antworten.
    Also dass ganze wird mit nem Shape als Kugel und zwei Scrollbars zur bestimmung der Abschußgeschwindigkeit und des Abschußwinkels simuliert. Danach werden die Werte mit den allgemein bekannten Formeln aus der Physik berechnet. Nochmal ich hab kein Formelproblem! Alle Werte di ich über die Labels ausgebe stimmen, auch die Flugzeit und Wurfeite, dass habe ich alles schon überprüft.

    Der Timer stoppt sobald die Kugel wieder den Boden erreicht hat, sprich wieder die ausgangshöhe erreicht hat. Danach wird alles ausgegebn Zeit, Wurfweite ect.
    doch wenn ich jetzt händisch Mitstoppe dann fliegt der Shape um einen konstanten Faktor von 1,5 länger als die Wurfzeit di mir der Timer ausgibt.

    Ich weiß nicht genau wie ich diesen Faktor von 1,5 ausgleiche.

    die Zeit t im Timer berechne ich wie folgt: (vl. liegt ja hier mein Fehler)

    void __fastcall TForm1::Timer1Timer(TObject Sender)
    {
    t=(0.01*cnt); /*Zeitausgabe
    /
    cnt++; /*Zählervariable*/
    }

    Ich habe dass Gefühl dass ich was mit dem Timer nicht richtig kapiert habe, am Interval des Timers kanns ja schließlich nicht liegen oder?

    ich hoffe ich habe diesmal meim Problem deutlich gemacht 🙄

    FrAnky



  • du stellst also den timer auf ein bestimmtes intervall (0.01s?) ein und inkrementierst bei jedem aufruf cnt.
    falls der timer aber nun nicht nach 0.01s aufgerufen wird, sondern etwas später, weil der prozessor noch etwas zu rechnen hatte, wird dein ergebnis mit jedem aufruf ungenauer.

    Lösungsvorschlag 1:
    Du erhöst das Intervall soweit wie nötig, dass du ein einigermassen genaues ergebnis bekommen kannst (10s bei einer flugzeit von 5s macht wenig sinn).

    Lösungsvoschlag 2 (besser):
    Du lässt das mit dem Timer weg und speicherst beim starten des wurfs die aktuelle systemzeit in ms in einer Variable und bildest beim aufkommen der kugel die differenz aus der jetztigen systemzeit und der gespeicherten.



  • Wow Ihr seit aber gut thx @ cin!!! 👍



  • Hätt dann noch eine Frage bez. Lösung Nr. 2 wie komm ich zur Systemzeit??? Soll ich dass mithilfe der <time.h> Libary machen mit den Komponenten:

    clock()
    CLOCKS_PER_SEC
    clock_t

    geht dass überhaupt oder gibt es gar eine infachere Lösung??
    FrAnky



  • timeGetTime z.B.


Anmelden zum Antworten