Beschleunigung mit Richtung erzeugen

7

Ich möchte mein Objekt mit einer Beschleunigung in die richtige Richtung bewegen. Zum Beispiel, wenn ich diese Werte habe:

friction = 0.3;
direction = 180;
speed = 5;

Um es klar zu machen, brauche ich eine Formel, um eine lineare Beschleunigung zu erzeugen.

MahanGM
quelle

Antworten:

5

Sie können die einzelnen Komponenten mit sin und cos berechnen:

xSpeed = sin(direction)*speed;
ySpeed = cos(direction)*speed;
[...]
xPos += xSpeed;
yPos += ySpeed;

Die Beschleunigung erhöht einfach die Geschwindigkeit.

xAccel = sin(accelDirection)*accleration;
yAccel = cos(accelDirection)*accleration;
// [...]
xSpeed += xAccel;
ySpeed += yAccel;
API-Beast
quelle
Eigentlich habe ich diese Lösung geschrieben, bevor ich diese Frage gestellt habe. Ihre Antwort wird durch die Antwort der Xavier Arias Botargues vervollständigt. Vielen Dank.
MahanGM
2

Die Beschleunigung ist die Geschwindigkeit, mit der sich die Geschwindigkeit ändert. Wenn es Null ist, bewegen Sie sich mit Ihrer Startgeschwindigkeit weiter. Wenn es größer als Null ist und in der gleichen Richtung wie die aktuelle Geschwindigkeit liegt, nimmt die Geschwindigkeit zu.

velocity = old_velocity + acceleration;
position = old_position + velocity

Wenn Beschleunigung = 2 ist, erhöht sich Ihre Geschwindigkeit für jeden Zeitschritt um 2.

torbjoernwh
quelle
Dies ist ähnlich wie bei anderen 2 Antworten. Vielen Dank.
MahanGM
1

Um Bewegungs- oder Physikberechnungen durchzuführen, sollten Sie immer die Zeit verwenden, die seit dem letzten Frame (dt oder Delta) aufgewendet wurde. Dies hängt von der Implementierung der Hauptschleife ab, wird jedoch im Allgemeinen an eine Methode namens update als Parameter übergeben. (Wenn dies nicht verfügbar ist, nehmen Sie dt = 1 an.)

Um Geschwindigkeit mit Beschleunigung und Zeit und Position mit Geschwindigkeit und Zeit zu aktualisieren, können Sie:

speed += acceleration * dt;
position += speed * dt;

Beachten Sie, dass Beschleunigung, Geschwindigkeit und Position Vektoren sind, also haben sie die Operationen:

  • Vektoraddition
  • Skalar- und Vektormultiplikation

Weitere Informationen: http://en.wikipedia.org/wiki/Euclidean_vector#Addition_and_subtraction

Um einen Vektor mit einem bestimmten Winkel zu erstellen, können Sie die von Mr. Beast beschriebene Methode verwenden.

Um Reibung zu simulieren, können Sie Folgendes tun:

speed -= speed * friction

Wo Reibung eine Zahl sein sollte: 0 <Reibung <1

Xavier Arias Botargues
quelle
Ja, ich habe die Zeit in meiner Frage nicht erwähnt. Ich verwende timeGetTime(), um den vorherigen Frame zu berechnen. Vielen Dank.
MahanGM