protected override bool InternalRun() { time = 0; trajectory.Clear(); var task = new AngryBirdsTask(); angle = task.FindSightAngle(v, distance); double x = 0; double y = 0; trajectory.Add(Tuple.Create(x, y)); double vx = v * Math.Cos(angle); double dt = distance / v / 1000; double g = 9.8; double vy = v * Math.Sin(angle); if (vx < 0.00001) { return(false); } while (x < distance) { time += dt; vy -= g * dt; x += vx * dt; y += vy * dt; trajectory.Add(Tuple.Create(x, y)); } return(Math.Abs(y) < distance / 100); }
protected override bool InternalRun() { time = 0; trajectory.Clear(); angle = AngryBirdsTask.FindSightAngle(v, distance); if (double.IsInfinity(angle)) { return(false); } if (double.IsNaN(angle)) { return(!hasSolution); } double x = 0; double y = 0; trajectory.Add(Tuple.Create(x, y)); var vx = v * Math.Cos(angle); var dt = distance / v / 1000; var g = 9.8; var vy = v * Math.Sin(angle); if (vx < 0.00001) { return(false); } while (x < distance) { time += dt; vy -= g * dt; x += vx * dt; y += vy * dt; trajectory.Add(Tuple.Create(x, y)); } return(Math.Abs(y) <= distance / 100); }
protected override bool InternalRun() { time = 0; trajectory.Clear(); var task = new AngryBirdsTask(); angle = task.FindSightAngle(v, distance); double x = 0; double y = 0; trajectory.Add(Tuple.Create(x, y)); double vx = v*Math.Cos(angle); double dt = distance/v/1000; double g = 9.8; double vy = v*Math.Sin(angle); if (vx < 0.00001) return false; while (x < distance) { time += dt; vy -= g*dt; x += vx*dt; y += vy*dt; trajectory.Add(Tuple.Create(x, y)); } return Math.Abs(y) < distance/100; }