имитация гравитации

Я хочу смоделировать свободное падение и столкновение с землей (например, прыгающий мяч). Объект упадет в вакууме - сопротивление воздуха можно не учитывать. Столкновение с землей должно вызвать некоторую потерю энергии, поэтому в конце концов объект перестанет двигаться. Я использую JOGL для визуализации точки, которая является моим падающим объектом. Гравитация постоянна (-9,8 м / с ^ 2).

Я нашел метод Эйлера для вычисления нового положения точки:

deltaTime = currentTime - previousTime;
vel += acc * deltaTime;
pos += vel * deltaTime;

, но я делаю что-то не так. Точка отскакивает несколько раз, а затем движется вниз (очень медленно).

Вот псевдокод (начальная позиция = (0,0f, 2,0f, 0,0f), начальная vel (0,0f, 0,0f, 0,0f) , gravity = -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;
     }

}

Как лучше всего добиться реалистичного эффекта? Как метод Эйлера соотносится с уравнениями постоянного ускорения?

8
задан Vert 10 August 2011 в 15:35
поделиться