Jason,
Invece di avere tre attributi di oggetto,
- Posizione del punto (x, y)
- Direzione Vector2D (x, y)
- Int velocità
spesso è molto più semplice combinare la direzione e la velocità in un vettore di velocità. Quindi hai solo due attributi,
- Posizione del punto (x, y)
- Velocità Vector2D (x, y)
Posizione di aggiornamento
Quando è necessario aggiornare la posizione dell'oggetto, è semplice come:
position.x += velocity.x * Δt;
position.y += velocity.y * Δt;
dov'è il Δt
tuo delta temporale - o differenza di tempo - o passo temporale.
Aggiornamento di posizione e velocità
È anche molto facile in questo modo gestire l'accelerazione (come per esempio dalla gravità). Se hai un vettore di accelerazione, puoi aggiornare la velocità e la posizione insieme in questo modo:
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;
(Questa è fondamentalmente la formula s = vt + ½at² da Physics 101.)
Applicare una velocità
Se si desidera applicare una determinata velocità in una direzione normalizzata, è possibile impostare la velocità in questo modo:
velocity.x = normalizedDirection.x * speed;
velocity.y = normalizedDirection.y * speed;
Derivare una velocità
E se hai bisogno di fare il contrario - derivando la velocità e la direzione da un dato vettore di velocità - puoi semplicemente usare il teorema di Pitagora o il .Length()
metodo:
speed = velocity.Length();
E una volta che la velocità è nota, la direzione normalizzata può essere calcolata dividendo la velocità per la velocità (facendo attenzione a evitare di dividere per zero):
if (speed != 0) {
normalizedDirection.x = velocity.x / speed;
normalizedDirection.y = velocity.y / speed;
} else {
normalizedDirection.x = 0;
normalizedDirection.y = 0;
}