Ich bin auf der Suche nach einer Möglichkeit, die Geschwindigkeit einer kreisförmigen Bewegung sanft zu erhöhen oder zu verringern.Ändern der Geschwindigkeit einer kreisförmigen Bewegung
die Parametergleichung eines Kreis verwendet, kann ich ein Objekt in einem Kreis im Laufe der Zeit bewegen:
x = center_x + radius * sin(time * speed)
y = center_y + radius * cos(time * speed)
Das Problem bei diesem Ansatz ist, dass ich nicht einfach speed = speed + 1
tun kann, um das Objekt, weil es zu beschleunigen führt zu ruckartigen Bewegungen. Dies ist sinnvoll, da die x- und y-Werte für jedes Bild auf der Basis absoluter Werte und nicht relativ zur vorherigen Position des Objekts neu berechnet werden.
Ein weiterer Ansatz könnte sein, einen Vektor zu verwenden, die die Geschwindigkeit des Objekts darstellt, dann stattdessen eine kreisförmige Bewegung auf den Vektor gelten:
v_x = radius * sin(time * speed)
v_y = radius * cos(time * speed)
x = x + v_x
y = y + v_y
Das Problem bei diesem Ansatz ist, dass, wenn ich die Geschwindigkeit ändern, dann der Radius wird wachsen oder schrumpfen. Dies ist sinnvoll, da die Bewegung relativ zur aktuellen Position ist und somit die Zeit im Wesentlichen übersprungen wird, wenn ich die Geschwindigkeit verändere.
Eine Implementierung, die ich mir vorstellen kann, ist die Verwendung eines Vektors, der vom Objekt zum Mittelpunkt des Kreises zeigt. Dann könnte ich die Tangente des Kreises an der Objektposition berechnen, indem ich den senkrechten Vektor verwende, ihn normalisiere und ihn nach der Geschwindigkeit skaliere. Ich habe das noch nicht implementiert, weil es für ein Problem wie dieses Overkill zu sein scheint. Bitte lassen Sie mich wissen, ob es eine einfachere Lösung gibt. Vielen Dank!
Dies hat das gleiche Problem wie meine zweite Implementierung. Probieren Sie es selbst aus. – Kai
@Kai: umm, nein sollte es nicht ... – ephemient
Ah, meine Implementierung war falsch, nicht dieser Algorithmus (so dumm aussehen). Vielen Dank! – Kai