Seite 1 von 1

Sanfte Bewegung / Beschleunigen & Abbremsen

Verfasst: 04.10.2012, 10:54
von Stimpy
Hallo liebe ZFX'ler,

irgendwie stecke ich mal wieder im Wust der Mathematik fest :shock: Also hoffe ich , dass mir hier vielleicht jemand weiterhelfen kann.

Es geht darum eine Bewegung zu erzeugen die sanft beschleunigt, dann sich linear bewegt und abbremst am Ende. Die Schwierigkeit liegt darin, dass ich ein Startwert habe der völlig verschieden sein kann aber der Endwert immer 45 sein muss und die Bewegung immer in der selben Framezahl erledigt sein soll. ich habe mit Sinus und Cosinus schon probiert aber ich habe Probleme das man auf 45 kommt, einfach Beschleunigen und Bremsen per Kurve ist kein Problem. Das ganze Versuche ich jetzt Vorzuberechnen in einer Schleife mit einer beliebigen Anzahl an Bewegungsframes.

Evtl. hat jemand dafür ja eine Formel

Grüße

Stimpy

Re: Sanfte Bewegung / Beschleunigen & Abbremsen

Verfasst: 04.10.2012, 11:22
von antisteo
e(x) ist die Differenz zum Wunschwert, der Fehlerwert
du regelst jeden Frame xx% von -e(x) auf den realen Wert drauf.

95% sind eine sehr rasche Annäherung an den Wert
3% ist eine sehr seichte Bewegung

Re: Sanfte Bewegung / Beschleunigen & Abbremsen

Verfasst: 04.10.2012, 11:28
von CodingCat
Bei einer festen Framezahl würde ich eine nicht-iterative Variante bevorzugen. Das was du willst hört sich eigentlich genau wie Smoothstep an. Bei 0 Frames Parameter 0, bei Endframe Parameter 1, das Ergebnis auf den Bereich [Startwert, 45] skalieren.

Re: Sanfte Bewegung / Beschleunigen & Abbremsen

Verfasst: 04.10.2012, 12:55
von Andre
Vielleicht kann auch das hier dir weiterhelfen:

Code: Alles auswählen

x = (( 1 -  Smoothing) * OldValue) + (Smoothing * TargetValue)
Wobei Smoothing eine Zahl so um die 1 herrum ist.

Wenn das ganze FPS abhängig sein soll, so kannst du einfach die beiden "Smoothing"-Werte mit der DeltaTime multiplizieren.

Re: Sanfte Bewegung / Beschleunigen & Abbremsen

Verfasst: 05.10.2012, 08:06
von Jonathan
Ansich sollte man das sehr geschickt mit Polynomen lösen können. Auf das Polynom, das Cat verlinkt hat, kommt man vermutlich durch die 4 Bedingungen "Ableitung in 0 und 1 muss 0 sein; Startwert 0, Endwert 1". Daraus erhält man dann also 4 Gleichungen und kann ein Gleichungssystem aufstellen und lösen und bekommt so die gewünschte Funktion.
In diesem Beispiel ändert sich die Geschwindigkeit natürlich ständig. Wenn du wirklich möchtest, dass die "Kurve" in der Mitte linear ist, kannst du deine Funktion auch in 3 Teile aufteilen, Beschleunigung, Bewegung und Abbremsung. Für jeden Teil kannst du dir dann wieder Bedingungen aufstellen, aus der Anzahl der Bedingungen bekommst du den Grad deines Polynoms (-1, weil man ja bei 0 anfängt zu zählen), dann stellst du wieder ein Gleichungssystem auf, und löst es.

Alternativ kannst du dir auch eine Funktion basteln, die nicht angibt, zu welchem Zeitpunkt das Objekt wo ist, sondern die angibt, zu welchem Zeitpunkt das Objekt wie schnell ist. Die Position des Objektes zu einem beliebigen Zeitpunkt bekommst du dann heraus, indem du diese Funktion integrierst. Der Vorteil ist, dass du hierbei vermutlich kein Gleichungssystem lösen musst.
Am Ende musst du dann natürlich alles passend skalieren, aber den Faktor hat man dann ja sehr schnell ermittelt.