В дополнение к проблеме максимальной скорости, ваш расчет расстояния также неверен.Вы сделали нечто вроде противоположной ошибки, которую я сделал в своем первоначальном ответе, вы не учитываете ускорение.
myDist = mySpeed * t; //distace = velocity * time
необходимо изменить на
myDist += mySpeed; //Old distance + current time slice's speed;
Если бы у вас не было изменения ускорения, вы могли бы использовать X t = X 0 + V 0 t + (1/2) в 2 fomula, но с момента изменения (оно меняется с 32,17 до 0 раз mySpeed >= maxSpeed
), поэтому вы должны суммироватьтекущую позицию, используя каждый раз, когда срезаем текущую скоростьполезный урок
Наряду с ошибками по поводу максимальной скорости, опубликованные людьми, некоторые ваши алгоритмы неверны.
формула для позиции: X t = X 0 + V 0 t + (1/2) при 2 , а формула скорости равна v t = v 0 t + a
V 0 = 0 и X 0 = alt
для вашей игры, поэтому ваш код может быть упрощен до
while(myAlt > 0)
{
myAlt = alt + .5 * g * t * t; // Starting Velocity was 0 so we left it out.
mySpeed = g * t; // Starting Velocity was 0 so we left it out.
Console.WriteLine("My Speed: " + mySpeed);
Console.WriteLine("My Distance: " + (alt - myAlt));
Console.WriteLine("Altitude: " + myAlt);
t++;
}
PS Если больше нечего обрабатывать, я нахожу Debugger.Break () более полезна, чем Console.ReadLine (), для предотвращения закрытия программы.