LERP - Interpolación lineal
Di esta respuesta para un problema similar hace unos días, pero aquí vamos:
La interpolación lineal es una función que le da un número entre dos números, según el progreso. En realidad, podrías obtener un punto entre dos puntos.
La gran fórmula: cómo calcularla
La fórmula general de LERP viene dada por pu = p0 + (p1 - p0) * u
. Dónde:
- pu: el número de resultado
- p0: el número inicial
- p1: el número final
- u: El progreso. Se da en porcentaje, entre 0 y 1.
Cómo obtener porcentaje
Quizás se pregunte, "¿Cómo puedo obtener este porcentaje?". No te preocupes Es así: ¿Cuánto tiempo tomará el punto para viajar para que el vector de inicio termine? Ok, divídalo por el tiempo que ya pasó. Esto te dará el porcentaje.
Mira, algo como esto: percentage = currentTime / finalTime;
Vectores calculadores
Para obtener un vector resultante, todo lo que necesita hacer es aplicar la fórmula dos veces, una para el componente X y otra para el componente Y. Algo como esto:
point.x = start.x + (final.x - start.x) * progress;
point.y = start.y + (final.y - start.y) * progress;
Calcular tiempo variable
Es posible que desee tener sus puntos para viajar a una velocidad de 0.5 puntos, ¿sí? Entonces, digamos, se viajará una distancia más larga en un tiempo más largo.
Puedes hacerlo de la siguiente manera:
Obtenga la longitud de la distancia Para ello, necesitará dos cosas. Obtenga el vector de distancia, luego transfórmelo en un valor de longitud.
distancevec = final - start;
distance = distancevec.length();
Espero que sepas vectores de matemáticas. Si no lo hace, puede calcular la longitud de un vector con esta fórmula d = sqrt(pow(v.x, 2) + pow(v.y, 2));
.
Obtenga el tiempo que tomará y actualice la hora final. Este es fácil. Como desea que en cada tic se obtenga una longitud de 0.5, solo tenemos que dividir y obtener cuántos ticks tenemos.
finalTime = distance / 0.5f;
Hecho.
AVISO: Quizás, esta no sea la velocidad prevista para usted, pero esta es la correcta. entonces tienes un movimiento lineal, incluso en movimientos diagonales. Si desea hacer x + = 0.5f, y + = 0.5f, entonces lea un libro de matemáticas de vectores y vuelva a verificar sus planes.
goal_dist
en tuif
condición?