Jason,
Zamiast mieć trzy atrybuty obiektu,
- Pozycja punktu (x, y)
- Kierunek Vector2D (x, y)
- Int prędkość
często o wiele łatwiej jest połączyć kierunek i prędkość w wektor prędkości. Masz tylko dwa atrybuty,
- Pozycja punktu (x, y)
- Prędkość Vector2D (x, y)
Aktualizacja pozycji
Gdy musisz zaktualizować pozycję obiektu, jest to tak proste, jak:
position.x += velocity.x * Δt;
position.y += velocity.y * Δt;
gdzie Δt
jest twoja delta czasu - lub różnica czasu - lub krok czasu.
Aktualizacja pozycji i prędkości
W ten sposób jest również bardzo łatwo poradzić sobie z przyspieszeniem (np. Grawitacyjnym). Jeśli masz wektor przyspieszenia, możesz zaktualizować prędkość i położenie razem w następujący sposób:
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;
(Jest to w zasadzie wzór s = vt + ½at² z fizyki 101.)
Stosowanie prędkości
Jeśli chcesz zastosować określoną prędkość w jakimś znormalizowanym kierunku, możesz ustawić prędkość w następujący sposób:
velocity.x = normalizedDirection.x * speed;
velocity.y = normalizedDirection.y * speed;
Wyprowadzanie prędkości
A jeśli potrzebujesz zrobić odwrotność - wyprowadzając prędkość i kierunek z danego wektora prędkości - możesz po prostu użyć twierdzenia Pitagorasa lub .Length()
metody:
speed = velocity.Length();
A gdy prędkość jest znana, znormalizowany kierunek można obliczyć, dzieląc prędkość przez prędkość (uważając, aby nie podzielić przez zero):
if (speed != 0) {
normalizedDirection.x = velocity.x / speed;
normalizedDirection.y = velocity.y / speed;
} else {
normalizedDirection.x = 0;
normalizedDirection.y = 0;
}