Чтобы расширить мой комментарий выше и ответить Тобиас , я добавлю полный ответ здесь.
При первоначальном осмотре я определил, что вы быстро снижаете скорость. Проще говоря, соотношение между кинетической энергией и скоростью составляет E = m v^2 /2
, поэтому после взятия производной по скорости вы получите
delta_E = m v delta_v
Затем, в зависимости от того, как определено energyloss
, вы можете установить отношения между delta_E
и energyloss
. Например, в большинстве случаев energyloss = delta_E/E_initial
, указанное выше соотношение можно упростить до
delta_v = energyloss*v_initial / 2
Это предполагает, что временной интервал мал, что позволяет вам заменить v
в первом уравнении на v_initial
, так что вы сможете сойти с рук за то, что вы делаете. Чтобы было ясно, delta_v
вычитается из velocity.y
внутри вашего блока столкновений вместо того, что у вас есть.
Что касается вопроса о добавлении сопротивления воздуха или нет, ответ - это зависит. Для малых начальных высот падения это не имеет значения, но может начать иметь значение с меньшими потерями энергии из-за отказов и более высоких точек падения. Для гладкой сферы диаметром 1 грамм 1 дюйм (2,54 см) я нанес разницу во времени между трением воздуха и без него в зависимости от высоты падения:
Для материалов с низкими потерями энергии (80-90+% удерживаемой энергии), я бы подумал добавить их для высоты падения 10 метров и выше. Но если бы капли были ниже 2-3 метров, я бы не стал беспокоиться.
Если кому-то понадобятся расчеты, я поделюсь ими.