LERP - Lineare Interpolation
Ich habe diese Antwort vor einigen Tagen für ein ähnliches Problem gegeben, aber jetzt geht es los:
Die lineare Interpolation ist eine Funktion, mit der Sie basierend auf dem Fortschritt eine Zahl zwischen zwei Zahlen erhalten. Sie könnten tatsächlich einen Punkt zwischen zwei Punkten bekommen.
Die große Formel - wie man sie berechnet
Die allgemeine LERP-Formel ist gegeben durch pu = p0 + (p1 - p0) * u
. Wo:
- pu: Die Ergebnisnummer
- p0: Die Anfangsnummer
- p1: Die endgültige Nummer
- u: Der Fortschritt. Sie wird in Prozent zwischen 0 und 1 angegeben.
Wie bekomme ich Prozentsatz
Sie fragen sich vielleicht: "Wie kann ich diesen Prozentsatz erhalten?". Mach dir keine Sorgen. Es ist wie folgt: Wie lange dauert es, bis der Startvektor fertig ist? Ok, dividiere es durch die Zeit, die bereits vergangen ist. Dies gibt Ihnen den Prozentsatz.
Schauen Sie, so etwas: percentage = currentTime / finalTime;
Vektoren berechnen
Um einen resultierenden Vektor zu erhalten, müssen Sie die Formel nur zweimal anwenden, einmal für die X-Komponente und einmal für die Y-Komponente. Etwas wie das:
point.x = start.x + (final.x - start.x) * progress;
point.y = start.y + (final.y - start.y) * progress;
Variationszeit berechnen
Vielleicht möchten Sie Ihre Punkte mit einer Geschwindigkeit von 0,5 Punkten fahren lassen, ja? Nehmen wir also an, eine längere Strecke wird in einer längeren Zeit zurückgelegt.
Sie können dies wie folgt tun:
Holen Sie sich die Distanzlänge Dafür benötigen Sie zwei Dinge. Holen Sie sich den Distanzvektor und transformieren Sie ihn in einen Längenwert.
distancevec = final - start;
distance = distancevec.length();
Ich hoffe du kennst Vektoren Mathe. Wenn Sie dies nicht tun, können Sie mit dieser Formel eine Vektorlänge berechnen d = sqrt(pow(v.x, 2) + pow(v.y, 2));
.
Holen Sie sich die Zeit, die es dauern wird, und aktualisieren Sie die Endzeit. Dieser ist einfach. Da Sie für jede Zecke eine Länge von 0,5 erhalten möchten, müssen wir nur teilen und ermitteln, wie viele Zecken wir haben.
finalTime = distance / 0.5f;
Getan.
HINWEIS: Vielleicht ist dies nicht die beabsichtigte Geschwindigkeit für Sie, aber dies ist die richtige. Sie haben also eine lineare Bewegung, auch bei diagonalen Bewegungen. Wenn Sie x + = 0,5f, y + = 0,5f ausführen möchten, lesen Sie ein Vektor-Mathematikbuch und überprüfen Sie Ihre Pläne erneut.
goal_dist
in deinemif
Zustand?