Ich habe einige Objekte in meinem Spiel, die "geworfen" werden. Im Moment versuche ich dies zu implementieren, indem diese Objekte einer parabolischen Kurve folgen. Ich kenne den Startpunkt, den Endpunkt, den Scheitelpunkt und die Geschwindigkeit des Objekts.
- Wie kann ich zu einem bestimmten Zeitpunkt oder Rahmen die x & y-Koordinaten bestimmen?
- Ist eine Parabelkurve überhaupt die richtige Kurve?
physics
projectile-physics
Ben Williams
quelle
quelle
Antworten:
Was suchen Sie nach einer parametrischen Darstellung der Parabelfunktion? Es ist am einfachsten, die parametrische Funktion in einem Bereich von p ∈ [0,1] zu verwenden.
Die kanonische Form für eine parametrische Parabel ist
Mit dieser Formel und einigen grundlegenden Algebra für Funktionsmorphing und ich bekam
Um diese Funktionen zu erhalten, werden die gesuchten Zahlen erzeugt.
quelle
f_x
verwenden dief_y
Beschleunigunga
als halbe Geschwindigkeit? Sie sollten das machenx(t) = x0 + vx0*t
undy(t) = y0 + vy0*t + .5*ay*t*t
a
undt
waren nur schlecht gewählte Namen. Sie sollten beachten, dass die Formeln keine Geschwindigkeitskomponente enthalten. Euler-Bewegung und parametrische Parabeln sind nicht dasselbe, aber sie sind sehr ähnlich, da der ballistische Flug einen parabolischen Pfad verfolgt.Das Finden der Gleichung einer Kurve, entlang der sich Ihr Objekt bewegen soll, ist eine Möglichkeit, das zu erreichen, was Sie wollen, aber wahrscheinlich nicht die beste.
Stattdessen verfolgt man normalerweise die lokalen Eigenschaften eines Objekts (Geschwindigkeit, Beschleunigung) und verwendet diese Werte dann, um die Position des Objekts in jedem Frame zu aktualisieren.
Da Sie eine Parabel erwähnt haben, gehe ich davon aus, dass Sie einen Ball in 2D werfen und möchten, dass er entlang der y-Achse herunterfällt. Ihr Objekt hat also eine konstante Beschleunigung in y-Richtung (nennen wir das
g
) und keine Beschleunigung in x-Richtung. Wenn das Objekt geworfen wird, erhält es eine gewisse Geschwindigkeit. Nennen wir dasvx
undvy
.Dann würden Sie in jedem Frame Ihrer Anwendung die Beschleunigung des Objekts zu seiner Geschwindigkeit hinzufügen und dann seine Geschwindigkeit zu seiner Position hinzufügen. Etwas wie:
Tun Sie dies bei jedem Frame und Ihr Ball beginnt sich zu bewegen. Es gibt noch viel mehr zu wissen, aber es ist ein Anfang.
quelle
Brandons Antwort ist ziemlich gut, aber wenn Sie etwas Fortgeschritteneres suchen, sollten Sie sich die lineare Interpolation ansehen : http://en.wikipedia.org/wiki/Linear_interpolation
Wenn Ihre Kurve eine Funktion ist, können Sie auch die x- und y- (und z-) Koordinaten zu einem bestimmten Zeitpunkt kennen. Dies könnte auch helfen: http://www.ucl.ac.uk/Mathematics/geomath/level2/fvec/fv8.html#l1
quelle
In Konsolenspielen verwenden wir häufig die bikubische Interpolation , um dieses Problem zu lösen. Probieren Sie zunächst die Position eines Objekts in regelmäßigen Zeitabständen t aus. Addieren Sie für ein Projektil in jedem Intervall die Gravitationsbeschleunigung [0, dy / dt / dt] zu seiner Geschwindigkeit [dx / dt, dy / dt]. Zeichnen Sie alle so erzeugten [x, y] -Koordinaten in einem Array auf.
Um später die Position des Objekts [x, y] für ein gegebenes t zu rekonstruieren, lesen Sie die vier Abtastwerte, die diesem t am nächsten liegen, aus dem von Ihnen aufgezeichneten Puffer: [t-1, t, t + 1, t + 2]. Mischen Sie die vier Proben gemäß den Koeffizienten im verknüpften Wikipedia-Artikel, um eine gleichmäßige Bewegung im Raum zu erzielen.
Dies ist physikalisch nicht so genau wie das direkte Ausführen von Physikberechnungen, ermöglicht jedoch eine künstlerische Lizenz und Skaleneffekte, um Ihre Simulation zu unterstützen.
quelle