У меня есть код, который я создал для моделирования свободного падения объекта в вакууме. Когда timestep установлен на 1000 мс, он отлично работает без проблем. когда я устанавливаю timestep ниже 1000 мс, он отклоняется от реальных значений, падающих намного быстрее, чем обычно. Это занимает около 14 секунд, чтобы упасть на 1000 метров при 1000 мс, что является правильным значением. При времени 100 мс это занимает всего 5 секунд. при 10 мс это займет всего 2,2 секунды.Почему этот простой код freefall не работает
Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно? Я думал, что я установил расчет timestep, чтобы иметь возможность обрабатывать более мелкие шаги.
Спасибо
Body testbody = new Body();
testbody.pos = new Vector(0, 1000);
testbody.velocity = new Vector(0, 0);
Bodytrack(testbody);
static void Bodytrack(Body body)
{
watch.Start();
int timestep = 1000;
while (body.pos.Y > 0)
{
body.pos = body.pos + (body.velocity * (timestep/1000.0));
if (body.pos.Y <= 0) { break; }
Thread.Sleep(timestep);
CalculateAcceleration(body);
Console.Clear();
Console.WriteLine(body.velocity.Y);
Console.WriteLine(body.pos.Y);
Console.WriteLine(watch.Elapsed.TotalSeconds);
}
watch.Stop();
}
public static void CalculateAcceleration(Body body)
{
body.acceleration = new Vector(0, -9.80665);
body.velocity = Vector.Add(body.acceleration, body.velocity);
}
Ни в коем случае вы не используете 'timestep' для вычисления новой скорости .... – SJuan76
корпус.ускорение в метрах в секунду в секунду, но вы не используете временной шаг, чтобы повлиять на него. –
И дополнительно к комментариям выше: когда вы его правильно реализуете с меньшими шагами, он будет падать быстрее, и это ожидается. – zerkms