Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

12.11.2006, 17:32

Beschleunigung und Bremsweg

Hi

ich will jetz in mein 2D Sidescroller Spiel net so eine aprute steuerung einbaun, sondeln will beschleunigung und bremsweg haben. gibt es dafür formel? konnte man da net sinus udn cosinus für nutzen?

ich muss gestehn, das ich sinus und cosinus noch net in der schule hatte. also ich wär dankbar dafür, wenn ihr mir einen link oder so geben könntet wo das erklärt ist.

Mfg
Eldarion

[fürs FAQ markiert/Abrexxes]

Anonymous

unregistriert

2

12.11.2006, 18:00

Die Idee:
http://matheplanet.com/default3.html?call=viewtopic.php?topic=66528&ref=http%3A%2F%2Fwww.google.de%2Fsearch%3Fhl%3Dde%26sa%3DX%26oi%3Dspell%26resnum%3D0%26ct%3Dresult%26cd%3D1%26q%3Dsprung%2Bmit%2Bcos%26spell%3D1

Die Berechnung:
http://de.wikipedia.org/wiki/Sinus

die Umsetzung:
http://www.robsite.de/tutorials.php?tut=mathematik (Kreisbahn 1+2)

Im Prinzip benutzt die nur ein Variable die du mit Sinus (waagerecht) oder cosinus (senkrecht) multiplizierst. Benutzt du beide gehts auch im Kreis. ;)

cu

3

12.11.2006, 18:09

ok, die fürh ich mir ma zu gemüte. danke^^

rklaffehn

Treue Seele

Beiträge: 267

Wohnort: Braunschweig

  • Private Nachricht senden

4

13.11.2006, 12:56

Ansonsten gibt es da noch die "normalen" Bewegungsgleichungen der Physik.

Notation:
p aktuelle Position (z.B. x-Position)
v aktuelle Geschwindingkeit (m/s) (velocity)
a Beschleunigung (beim Bremsen negativ) m/s² (acceleration)
t Zeit (Zeitschritt der Simulation)

Die gestrichenen Variablen sind die neu berechneten (also z.B. v') Werte.

(1) p' = p + v * t + 0.5 * a * t²
(2) v' = v + t * a

Mit Gleichung (1) berechnet man die neue Position aus der aktuellen Position, der aktuellen Geschwindigkeit und der aktuellen Beschleunigung.

Mit Gleichung (2) wird die neue Geschwindigkeit für den nächsten Zeitschritt berechnet.

Eine Maximalgeschwindigkeit kann man damit erreichen, dass die Beschleunigung angepasst wird, so dass beim Maximum nicht mehr beschleunigt werden kann (a = 0). Der einfachste Ansatz wäre hier a = (v < max_v ? 1 : 0) Solange die maximale Geschwindigkeit nicht erreicht ist, mit konstanter Beschleunigung schneller werden.

Das Gegenstück zum bremsen wäre dann a = (v > 0 ? -1 : 0)

Beachte: mit diesen Gleichungen wird man ein wenig an max_v und 0 vorbeilaufen. Das muss dann entsprechend abgefangen werden. Ausserdem ist 1 bzw. -1 ein willkürlich gewählter Wert, Gravitation wäre z.B. 9.81m/s².

Das nette hier ist, dass man keine Trigonometrie braucht und dass es von der Physik her korrekt ist.

Das ganze funktioniert auch, wenn p, v und a Vektoren sind, so dass man auch Sprünge damit realisieren kann.

Gruss,
Rainer
God is real... unless declared integer.
http://www.boincstats.com/signature/user_967277_banner.gif

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

13.11.2006, 14:00

Zitat

p' = p + v * t + 0.5 * a * t²


bist du dir da ganz sicher?
evtl. denk ich grad falsch, aber warum sollte man da noch 0.5*a*t² addieren?

0.5*a*t² gilt außerdem NUR bei gleichmäßig beschleunigter bewegung.

außerdem sollte t möglichst klein sein (also z.b. die zeit die seit dem letzten frame vergangen ist) damit da was vernünftiges rauskommt, sonst musst du da das integral auspacken ;)

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

6

13.11.2006, 17:23

Also approximiert kann man schon von linearer Beschleunigung ausgehen... Vor allem bei kleinem dt

Seine Formel stimmt schon... du addierst den durch die Beschleunigung zurückgelegten Weg (ohne Basisgeschwindigkeit, jener Weg der nach t bei einer Beschleunigung von a von v = 0 zurückgelegt wurde). Falls nun aber v0 != 0, muss dieser zusätzliche Weg dazuaddiert werden --> v * t

Edit:
Abgesehen davon eignen sich diese Formeln weniger gut für die Echtzeitsimulation... Da wäre etwas alla ... besser:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
//Wobei dt die Zeit seit dem letzten Frame ist
// v, p Position beim letzten Frame
// v', p' Neue Positionen
// a --> eine (konstate) Beschleunigung! [m/s²]

dv = a * dt
v' = v + dv
v' = v + a * dt

p' = p + v' * dt
p' = p + (v + a * dt) dt
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

rklaffehn

Treue Seele

Beiträge: 267

Wohnort: Braunschweig

  • Private Nachricht senden

7

13.11.2006, 17:30

Zitat von »"dot"«

Zitat

p' = p + v * t + 0.5 * a * t²


bist du dir da ganz sicher?
evtl. denk ich grad falsch, aber warum sollte man da noch 0.5*a*t² addieren?


Naja, da man davon ausgehen kann, das t != 0 ist, ändert sich die Geschwindigkeit die ganze Zeit (bei konstanter Beschleunigung a, siehe unten). Wenn ich also keinen Faktor von a addiere, geht mir diese Geschwindigkeitsänderung verloren.

Wenn ich jetzt die Differentialgleichungen dazu zur Hand hätte (die wollen mit echt nicht einfallen :)) könnte ich das auch herleiten. :? das ist alles sooo lange her.

Eine etwas mathematischere ;) Herleitung gibt es auf Wikipedia zu lesen: Bewegungsgleichung eines Teilchens unter Einfluss einer konstanten Kraft. Dort wird exemplarisch mit der Gravitation g gerechnet (bei mir allgemeiner a), und mein p heisst dort r.

Zitat

0.5*a*t² gilt außerdem NUR bei gleichmäßig beschleunigter bewegung.

außerdem sollte t möglichst klein sein (also z.b. die zeit die seit dem letzten frame vergangen ist) damit da was vernünftiges rauskommt, sonst musst du da das integral auspacken ;)


Das stimmt. Die Gleichungen funktionieren nur, wenn die Beschleunigung konstant ist. Dann darf allerdings auch das t beliebig Gross sein.

Wenn man (wie in der Realität) mit veränderlicher Beschleunigung rechnen muss, macht man das t möglichst klein, um die Fehler zu minimieren. Der gedankliche Hintergrund dazu ist, dass man bei sehr kleinen Zeitintervallen eine konstante Beschleunigung annehmen kann, und somit darf man auch mit den Gleichungen rechnen.

In einer Hardcore-Simulation müsste man also eine Fehlerrechnung machen, um zu schauen, wie schlimm es wird. Für unsere Zwecke kommen wird auch ohne sowas aus ;). Hauptsache ist, es sieht am Ende richtig aus.

Gruss,
Rainer

PS: ich bin kein Physiker, also wenn ich totalen Quatsch rede, sei mir das verziehen.... Moment. In den Ohren der meisten Menschen reden Physiker Quatsch. ;)

PPS: Das ist nicht ernst gemeint. :roll:
God is real... unless declared integer.
http://www.boincstats.com/signature/user_967277_banner.gif

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

13.11.2006, 18:07

hm

ich dachte, dass die beschleunigung ja eigentlich schon durch die erhöhung der geschwindigeikt im nächsten frame dazukommt...


EDIT: du hast recht, hatte da einen denkfehler eingebaut^^ :oops:
deine formel stimmt.

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

9

14.11.2006, 12:39

Wenn man relativ großen Wert auf Genauigkeit legt, kann man die Werte für p und v mittels einer Taylor-Reihe und die Änderung von a im Zeitverlauf (a muss also nicht konstant sein) über Lagrange-Polynome ermitteln.
Ich habe hier extra auf Notationen wie p' verzichtet, weil bei den Lagrange-Polynomen ohnehin Werte benötigt werden, die "weiter in der Vergangenheit liegen". Die aktuelle Position ist beispielsweise p(t), die "neue" Position wäre dann p(t+dt). Dies impliziert jedoch ein konstantes dt.

p(t+dt) = p(t) + dt*v(t) + ½dt²*a(t) + 1/6*dt³*dLa
v(t+dt) = v(t) + dt*a(t) + ½dt²*dLa

dLa = 1/(2dt) * ( 3a(t) - 4a(t-dt) + a(t-2dt) )

Die Beschleunigung ist jeweils aufgrund der vorliegenden physikalischen Kräfte zu berechnen.
Das Gleichungssystem setzt ein konstantes dt voraus – wie bereits angesprochen –, jedoch sollte es durch ein paar Modifikationen auch variable Zeitintervalle ermöglichen.

(Quelle: Vergleiche Jalba et al., CPM: A Deformable Model for Shape Recovery and Segmentation Based on Charged Particles.)
Kommen Sie nie mit einem Schwert zu einer Schießerei.

10

14.11.2006, 15:28

öhm, mir reicht ne einfache methode^^.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
//Wobei dt die Zeit seit dem letzten Frame ist
// v, p Position beim letzten Frame
// v', p' Neue Positionen
// a --> eine (konstate) Beschleunigung! [m/s²]

dv = a * dt
v' = v + dv
v' = v + a * dt

p' = p + v' * dt
p' = p + (v + a * dt) dt 


was ist denn jetz v und p`?

v ist die geschwindigkeit und p ist die x koordinate bzw. die y koordiante, oder?

und wie läuft das beim bremsen=? ich seh das bis jetz nur für die beschleuning. muss a dann einfach negativ sein=

danke für die supervielen tipps und anregungen.

MfG
Eldarion72

Werbeanzeige