public double[] BruteForceEvenPositive(double x, double y, double wind, int startingAngleEven) { _isEvenPositiveCompleted = false; double[] currentWinner = new double[3] { -1, -1, 10000 }; //Start current winner (Power, Angle, Minimum distance) // for (int thetaDegreesIndex = 90; thetaDegreesIndex > 0; thetaDegreesIndex -= 2) for (int a = startingAngleEven; a < startingAngleEven + 90; a += 2) { if (_isOddPositiveCompleted || _isOddNegativeCompleted || _isEvenNegativeCompleted) { return(currentWinner); } int thetaDegreesIndex; if (a > 180) { thetaDegreesIndex = a - 182; } else { thetaDegreesIndex = a; } double thetaDegrees = thetaDegreesIndex; double thetaRadians = thetaDegrees * PI / 180; ShooterResult newShooterResultEvPos = _newOdeSolution.Shooter(x, y, thetaRadians, wind, startingPower); double newPower = newShooterResultEvPos.Power; IVPSolverResult newIvpSolverResultEvPos = _newOdeSolution.IVPSolver(x, y, thetaRadians, wind, newPower); double newMinimumDistance = newIvpSolverResultEvPos.MinimumDistance; if (_newBumper.isRebound && !newIvpSolverResultEvPos.DidIHitABumper) { continue; } if (Abs(newMinimumDistance) < Abs(currentWinner[2])) { currentWinner[0] = newPower; currentWinner[1] = thetaDegrees; currentWinner[2] = newMinimumDistance; } if (!newShooterResultEvPos.AMinimumDistanceWasFound) { continue; } _isEvenPositiveCompleted = true; return(currentWinner); } return(currentWinner); }
private void ThinkWithPortals_Click(object sender, RoutedEventArgs e) { double powerGuess = _newOde.Shooter(NewWorld.X, NewWorld.Y, NewWorld.Theta, NewWorld.Wind).Power; Debug.Text = powerGuess.ToString("0.00"); if (!(double.IsInfinity(powerGuess) || double.IsNaN(powerGuess))) { PlotGraph(); } }