Achterbahn Physik



  • Hallo,

    ich bin dabei ein Achterbahn-Spiel zu programmieren, ähnlich wie diese Spiele:

    http://www.spielkarussell.de/spiele/denkspiele/achterbahn_spiele_sammlung.html

    Die Physik soll besonders realistisch sein, was mir bis jetzt auch gut gelungen ist. Die Wagen folgen den Schienenverlauf und die Geschwindigkeit erhöht und verringert sich mit der Steigung der Gleise. Mein Problem ist jedoch das die Wagen die Gleise genau folgen, sie können bei zu großem Schwung bei einem Hügel nicht von den Gleisen abheben.

    Die "Vorwärtsgeschwindigkeit":

    winkel_verzögert=winkel_verzögert*0.99-winkel*0.01;

    speed_x= faktor * winkel_verzögert;

    wagen.Move(speed,0); // in x Richtung bewegen

    Die "Vertikalgeschwindigkeit":

    while(Wagen befindet sich unter den Gleisen)
    {
    wagen.Move(0,-100* ElapsedTime); // Wagen nach oben bewegen
    }

    if(Wagen befindet sich über den Gleisen)
    {
    wagen.Move(0,500* ElapsedTime); // Wagen "fällt" nach unten
    }

    Vielleicht hat jemand eine Idee wie man dieses Problem lösen kann.



  • Was ist denn dein Problem?
    Das errechnen, ob sie abheben würden oder das darstellen des "hüpfens" und wieder nach-unten-fallens?



  • Mir fehlt die Formel für die vertikale Geschwindigkeit. Bis jetzt ist der Wagen fest mit den Gleisen verbunden und kann sie nicht verlassen. Ich möchte jedoch das die Wagen, wenn man mit zu hoher Geschwindigkeit über ein Hügel fährt, abheben.

    Jetzt sage ich einfach nur:

    Wenn der Wagen über den Gleisen ist: bewege den Wagen nach unten
    Wenn der Wagen unter den Gleisen ist: bewege den Wagen nach oben

    Dadurch heben die Wagen aber nicht ab.



  • 1. Mir fehlt die Formel für die vertikale Geschwindigkeit
    hmm? Ich vermute mal, du kannst die Reibung vernachlässigen:

    `Epot0 + Ekin0 == Epot1 + Ekin1

    mg0h0 + mv0v0/2 == mg1h1 + mv1v1/2

    g0h0 + v0v0/2 == g1h1 + v1v1/2`
    du hast also die höhe0 und höhe1, die beschleunigung0 und geschwindigkeit0 - du musst dir also den Punkt ganz oben in der Kurve raussuchen, wo der Wagen gerade ein Stücken lang waagerecht fährt -> g1 == 0

    also:
    `g0h0 + v0v0/2 = 0h1 + v1v1/2

    v1v1/2 = g0h0 + v0*v0/2

    v1 = sqrt (2g0h0 + v0*v0)`

    2. dann brauchst du dazu aber glaube noch was:
    die Zentrifugalbeschleunigung

    http://de.wikipedia.org/wiki/Zentripetalkraft#Zentripetal-_und_Zentrifugalbeschleunigung

    Fg = mg
    Fr = m
    v² / r

    `

    mg == mv² / r

    g == v² / r

    `

    Und damit kannst du r ausrechnen und den radius mit dem wirklichen vergleichen... schon weist du, in was für nem bogen die bahn fliegen muss - glaube ich ^^

    Oder du berechnest v*v / r und vergleichst das mit g und lässt die Bahn nen Stückchen fliegen, wenn das größer ist als g... Gibt sicherlich ne Menge guter Möglichkeiten...

    kannst dich ja mal melden, wenn du es hast und sagen, ob es so ging ^^

    bb



  • Danke für deine Antwort. Werde jetzt mal sehen wie ich das ganze im Programm verarbeiten kann.


Anmelden zum Antworten