public KickResult KickBall() { var elapsed = (_elapsedMilliseconds / _discrTimeStep) * _discrTimeStep; var time = elapsed / 1000.0; var ballShift = _physics.EvaluteShift(time); var kickResult = new KickResult(ballShift, time); return kickResult; }
public KickResult KickBall() { var error = _random.Sample(); var x = (_holePositionX - _ballPositionX) + error; var elapsedTime = _ballKick.EvaluteElapsedTime(new Vector2(x, 0)); var kickResult = new KickResult(_ballKick.EvaluteShift(elapsedTime), elapsedTime); return kickResult; }
public KickResult KickBall() { var error = Normal.Sample(_playerModel.ErrorMean, _playerModel.ErrorStddev); var x0 = _hole.Position.X - _ball.Position.X; var x = x0 + error; var elapsedTime = _ballKick.EvaluteElapsedTime(new Vector2(x, 0)); var kickResult = new KickResult(_ballKick.EvaluteShift(elapsedTime), elapsedTime); return kickResult; }
public KickResult KickBall() { var lastUserStrike = _player.Strikes.Last(); var probability = lastUserStrike.IsHit ? _competitorModel.BotHitProbabilityIfUserHit : _competitorModel.BotHitProbabilityIfUserMiss; double error = SampleError(probability); var x = _hole.Position.X - _ball.Position.X + error; //TODO: Возможно ошибка //var elapsedTime = (x - _strikeModel.Model.Delay) / _strikeModel.Model.Velocity; var elapsedTime = _ballKick.EvaluteElapsedTime(new Vector2(x, 0)); var kickResult = new KickResult(_ballKick.EvaluteShift(elapsedTime), elapsedTime); return kickResult; }
public static Strike CreateStrike(Ball ball, Hole hole, StrikeInfo currentKick, KickResult kickResult, TimeSpan timeBeforeSpaceDown = new TimeSpan()) { var kickedBall = new Ball() { Size = ball.Size, Position = ComputeBallPosition(ball, kickResult) }; var miss = GetMiss(hole, kickedBall); var strikeTimeSpan = TimeSpan.FromSeconds(kickResult.ElapsedTime); var strike = new Strike { Number = currentKick.RepeatTimes, StrikeInfo = currentKick, DateTime = System.DateTime.Now, ErrorDistance = kickedBall.Position.X - hole.Position.X, IsHit = Math.Abs(miss - 0.0) < 0.001, MissDistance = Math.Round(miss, 3), MissTime = Math.Round(miss / currentKick.Model.Velocity, 3), BeforeStrikeTimeSpan = timeBeforeSpaceDown, StrikeTimeSpan = strikeTimeSpan, TotalTimeSpan = timeBeforeSpaceDown + strikeTimeSpan, StartBallPosition = ball.Position.Copy(), StartHolePosition = hole.Position.Copy() }; return strike; }
private static Vector2 ComputeBallPosition(Ball ball, KickResult kickResult) { return new Vector2(ball.Position.X + kickResult.BallShift.X, ball.Position.Y + kickResult.BallShift.Y); }