chcę symulować swobodnego spadania i zderzenia z ziemią (na przykład odbijając kulkowe). Obiekt spadnie w próżni - opór powietrza można pominąć. Kolizja z podłożem powinna spowodować utratę energii, aby obiekt przestał się poruszać. Używam JOGL do renderowania punktu, który jest moim spadającym przedmiotem. Grawitacja jest stała (-9,8 m/s^2).grawitacja symulacja
znalazłem metodę Eulera, aby obliczyć nową pozycję punktu:
deltaTime = currentTime - previousTime;
vel += acc * deltaTime;
pos += vel * deltaTime;
ale robię coś złego. Punkt odbija się kilka razy, a następnie przesuwa się w dół (bardzo wolno).
Oto pseudokod (początkowa poz = (0.0f, 2.0f, 0.0f) początkowe vel (0.0f, 0.0f, 0.0f), ciężar właściwy = -9.8f)
display()
{
calculateDeltaTime();
velocity.y += gravity * deltaTime;
pos.y += velocity.y * deltaTime;
if(pos.y < -2.0f) //a collision with the ground
{
velocity.y = velocity.y * energyLoss * -1.0f;
}
}
Jaki jest najlepszy sposób na uzyskanie realistycznego efektu? Jak metoda Eulera odnosi się do stałych równań przyspieszenia?
Co się stanie, jeśli po prostu wziąłeś stratę energii z równania? – redbmk
Oprócz odpowiedzi Yochai, możesz rozważyć ustawienie pozycji "pos.y" na poziomie gruntu w swojej walizce kolizyjnej, aby uniknąć błędów wycinania. –
Bez utraty energii punkt przestaje odbijać się po jakimś czasie i bardzo wolno się porusza. – Vert