Beispiel #1
0
        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();
            }
        }