Я пытаюсь разобраться в этих методах интеграции, и я глубоко сбит с толку.
Вот код:
public void update_euler(float timeDelta){
vPos.y += vVelocity.y * timeDelta;
vVelocity.y += gravity.y * timeDelta;
}
public void update_nsv(float timeDelta){
vVelocity.y += gravity.y*timeDelta;
vPos.y += vVelocity.y * timeDelta;
}
public void onDrawFrame(GL10 gl) {
currentTime = System.currentTimeMillis();
float timeDelta = currentTime - startTime;
startTime = currentTime;
timeDelta *= 1.0f/1000;;
// update_RK4(timeDelta);
// update_nsv(timeDelta);
// update_euler(timeDelta);
// update_velocity_verlet(timeDelta);
}
Во-первых, я просто хочу убедиться, что я правильно понял.
Я имитирую идеально упругий отскок мяча, поэтому при отскоке я просто изменяю скорость.
Метод Эйлера, мяч отскакивает выше при каждом отскоке. Это из-за ошибки в моем коде или из-за неточности метода. Я читал, что с интеграцией Эйлера вы теряете энергию с течением времени. Ну, я получаю это, и я не знаю почему.
Метод nsv: я не совсем понимаю, чем он отличается от метода Eular, но в любом случае мяч отскакивает ниже при каждом отскоке. Потеря энергии, которую я прочитал, не должна происходить с помощью метода nsv. Почему я теряю энергию?
(методы verlet и RK4 работают так, как я ожидал).
У меня сложилось впечатление, что мне не хватает фундаментальной информации по этому вопросу, но я не знаю, что.
Я понимаю, что моего временного шага не хватает, и его обновление для запуска физики с использованием статического временного шага остановило бы меня на потерю / получение энергии, но я пытаюсь понять, что происходит.
Буду признателен за любую помощь.