Jason
En lugar de tener tres atributos de objeto,
- Posición del punto (x, y)
- Dirección Vector2D (x, y)
- Int velocidad
A menudo es mucho más fácil combinar la dirección y la velocidad en un vector de velocidad. Entonces solo tienes dos atributos,
- Posición del punto (x, y)
- Vector2D (x, y) velocidad
Puesto de actualización
Cuando necesita actualizar la posición del objeto, es tan simple como:
position.x += velocity.x * Δt;
position.y += velocity.y * Δt;
¿Dónde Δt
está su delta de tiempo, o diferencia de tiempo, o paso de tiempo?
Actualización de posición y velocidad
También es muy fácil manejar la aceleración (como la gravedad). Si tiene un vector de aceleración, puede actualizar la velocidad y la posición juntas de la siguiente manera:
position.x += (velocity.x * Δt) + (0.5 * acceleration.x * Δt * Δt);
position.y += (velocity.y * Δt) + (0.5 * acceleration.y * Δt * Δt);
velocity.x += acceleration.x * Δt;
velocity.y += acceleration.y * Δt;
(Esta es básicamente la fórmula s = vt + ½at² de Física 101.)
Aplicando una velocidad
Si desea aplicar una velocidad dada en una dirección normalizada, puede establecer la velocidad de esta manera:
velocity.x = normalizedDirection.x * speed;
velocity.y = normalizedDirection.y * speed;
Derivando una velocidad
Y si necesita hacer lo contrario, derivando la velocidad y la dirección de un vector de velocidad dado, simplemente puede usar el teorema de Pitágoras o el .Length()
método:
speed = velocity.Length();
Y una vez que se conoce la velocidad, la dirección normalizada se puede calcular dividiendo la velocidad por la velocidad (teniendo cuidado de evitar dividir por cero):
if (speed != 0) {
normalizedDirection.x = velocity.x / speed;
normalizedDirection.y = velocity.y / speed;
} else {
normalizedDirection.x = 0;
normalizedDirection.y = 0;
}