private int PerformIntervalForRunners(int runersCompleted) { foreach (Runner runner in _runners) { double drag = Formula.Drag(runner.HorseAttributes.dragCoefficient, runner.Velocity); double acc = Formula.Acceleration(runner.HorseAttributes.Power, drag, runner.HorseAttributes.Mass); runner.Velocity += Formula.Velocity(acc, _interval); runner.Displacement += Formula.Displacement(runner.Velocity, _interval, acc); _results.Add(runner.Id, runner.Displacement); if (runner.Displacement >= _raceInfo.CourseLength && runner.IsRunning) { runner.IsRunning = false; runner.FinishingDisplacement = runner.Displacement; runner.FinishingTime = _alapsed; runersCompleted++; } } return(runersCompleted); }