Schwerkraft-Simulation

8

Ich möchte einen freien Fall und eine Kollision mit dem Boden (zum Beispiel einen springenden Ball) simulieren. Das Objekt fällt in ein Vakuum - ein Luftwiderstand kann entfallen. Eine Kollision mit dem Boden sollte zu einem gewissen Energieverlust führen, so dass das Objekt sich schließlich nicht mehr bewegt. Ich benutze JOGL, um einen Punkt darzustellen, der mein fallendes Objekt ist. Die Schwerkraft ist konstant (-9,8 m / s ^ 2).

Ich habe eine euler-Methode gefunden, um eine neue Position des Punktes zu berechnen:

%Vor%

Aber ich mache etwas falsch. Der Punkt springt ein paar Mal und dann bewegt er sich nach unten (sehr langsam).

Hier ist ein Pseudocode (Anfangspos = (0.0f, 2.0f, 0.0f), initial vel (0.0f, 0.0f, 0.0f), Schwere = -9.8f):

%Vor%

Was ist der beste Weg, um einen realistischen Effekt zu erzielen? Wie bezieht sich die Euler-Methode auf die Konstantbeschleunigungsgleichungen?

    
Vert 10.08.2011, 15:35
quelle

2 Antworten

6

Da Gleitkommazahlen nicht gut zusammenlaufen, werden Sie nie eine Geschwindigkeit erreichen, die eigentlich 0 ist. Sie würden wahrscheinlich etwas wie -0,00000000000001 oder so etwas bekommen.

Sie müssen es 0.0 machen, wenn es nahe genug ist. (Definieren Sie ein Delta.)

    
Yochai Timmer 10.08.2011 15:44
quelle
2

Um auf meinen obigen Kommentar einzugehen und Tobias zu antworten, füge ich hier eine vollständige Antwort hinzu.

Bei der ersten Inspektion stellte ich fest, dass Sie die Geschwindigkeit zu schnell abflauen. Einfach gesagt, die Beziehung zwischen kinetischer Energie und Geschwindigkeit ist E = m v^2 /2 , also nach der Ableitung der Ableitung in Bezug auf die Geschwindigkeit erhalten Sie

%Vor%

Dann, abhängig davon, wie energyloss definiert ist, können Sie die Beziehung zwischen delta_E und energyloss herstellen. Zum Beispiel kann in den meisten Fällen energyloss = delta_E/E_initial die obige Beziehung als

vereinfacht werden %Vor%

Dies setzt voraus, dass das Zeitintervall klein ist und Sie v in der ersten Gleichung durch v_initial ersetzen können, also sollten Sie es für das, was Sie tun, durchkommen lassen. Um klar zu sein, wird delta_v von velocity.y innerhalb Ihres Kollisionsblocks subtrahiert und nicht von dem, was Sie haben.

Was die Frage des Luftwiderstandes anbelangt oder nicht, hängt die Antwort davon ab. Für kleine anfängliche Fallhöhen spielt dies keine Rolle, aber es kann mit kleineren Energieverlusten aufgrund von Bounce und höheren Tropfpunkten beginnen. Für eine 1 Gramm, 1 Zoll (2,54 cm) Durchmesser glatte Kugel zeichnete ich den Zeitunterschied zwischen mit und ohne Luftreibung gegen Fallhöhe:

Für Materialien mit geringem Energieverlust (80 - 90+% Energieeinbehalt) würde ich in Betracht ziehen, sie für 10 Meter und höhere Fallhöhen hinzuzufügen. Aber, wenn die Tropfen unter 2 - 3 Meter sind, würde ich nicht stören.

Wenn jemand die Berechnungen möchte, werde ich sie teilen.

    
rcollyer 10.08.2011 20:49
quelle

Tags und Links