Простая задача, падения шарика, отталкивание от границы откуда происходит затухание, если его не должно быть?
public void ApplyGravitation(float dt)
{
int num = particleList.Count;
float gravitatity=9.8f ;
float fG = gravitatity * dt;
for (int i = 0; i < num; i++)
{
particleList[i].Velocity.Y += fG;
}
}
public void UpdatePosition(float dt)
{
int numParticles = NumParticles;
float maxH = h -(float)ParticleRadius;
for (int i = 0; i < numParticles; i++)
{
Particle p = particleList[i];
p.Pos += p.Velocity * dt;
if (p.Pos.Y >= maxH)
{
// var dy = (p.Pos.Y-maxH);
// p.Velocity.Y -= dy / dt;
// p.Pos.Y -=dy;
p.Pos.Y = maxH;
p.Velocity.Y *= (-1);
}
}
}
Происходит со временем затухание, высота все меньше и меньше, хотя я ожидаю Что частица будет вечно прыгать(какой-то класс проблем).
Затухание происходит при dt от 0.05.
Там есть всегда момент когда шарик чуть заходит под границу, то есть пробеливает лишнею работу, то есть долю времени выполняет запрещенную работу, а значит и имеет чуть большое ускорение. Сколько раз реализовывал такую задачу и видел кодов, решений, ни где не поднимали эту проблему. Либо я в моменте что-то упустил
Но мне кажется это какая-то проблема у которой есть какое-то определённое Google Key Word название, без знания которого ты ни когда не загугнишь.
Там еще есть момент, допустим шарик почти поднялся на макс высоту, текущая скорость допустим -0.2, Ускорение в этот момент добавляет +0.5 скорости, то есть следующая скорость будет +0.3, то есть шарик не долетит до максимума, а начнет падать на итерации чуть раньше, и эта дельта времени или расстояния Накапливается,