コード例 #1
0
ファイル: Sattelite.cs プロジェクト: rgoo-qmr/SolarSlingShot
//  function normalize()
//{
//    magnitude = sqrt(x * x + y * y)
//    if (magnitude > 0.0)
//    {
//        x = x / magnitude
//        y = y / magnitude
//    }
//}
        public void NormalizePos(PositionParams pvPositionParams)
        {
            double magnitude = Math.Sqrt((pvPositionParams.PosX * pvPositionParams.PosX) + (pvPositionParams.PosY * pvPositionParams.PosY));

            if (magnitude > 0)
            {
                pvPositionParams.PosX = pvPositionParams.PosX / magnitude;
                pvPositionParams.PosY = pvPositionParams.PosY / magnitude;
            }
        }
コード例 #2
0
ファイル: Planet.cs プロジェクト: rgoo-qmr/SolarSlingShot
        /** while the planet is in orbit its velocity is the rate at which the angle changes
         * and its new position is based on that and its distance from the sun centre (Radius of the orbit)
         * */
        //void orbit ()
        //{
        //    int x = 0, y = 0;

        //    fixed angle = itofix (0);
        //    fixed angle_stepsize = itofix (1);

        //    // These determine the radius of the orbit.
        //    // See what happens if you change length_x to 100 :)
        //    int length_x = 50;
        //    int length_y = 50;

        //    // repeat this until a key is pressed
        //    while (!keypressed())
        //    {
        //        // erase the point from the old position
        //        //putpixel (screen,
        //        //    fixtoi(x) + SCREEN_W / 2, fixtoi(y) + SCREEN_H / 2,
        //        //    makecol (0, 0, 0));

        //        // calculate the new position
        //        x = length_x * fcos (angle);
        //        y = length_y * fsin (angle);

        //        // draw the point in the new position
        //        putpixel (screen,
        //            fixtoi(x) + SCREEN_W / 2, fixtoi(y) + SCREEN_H / 2,
        //            makecol (255, 255, 255));

        //        // increment the angle so that the point moves around in circles
        //        angle += angle_stepsize;

        //        // make sure angle is in range
        //        angle &= 0xFFFFFF;

        //        // wait 10 milliseconds, or else it'd go too fast
        //        rest (10);
        //    }
        //}

        // constructor
        public Planet(Sun pvSun, PositionParams pvPosition, string pvName, double pvSatelitePullRadius)
        {
            nextID                 = nextID + 1;
            objSun                 = pvSun;
            objPosition            = pvPosition;
            strName                = pvName;
            dblSatellitePullRadius = pvSatelitePullRadius;
            planetID               = nextID;

            orbitDistance = DistanceTravelled(0, 360);
            bPlanetMoon   = false;
        }
コード例 #3
0
ファイル: Sattelite.cs プロジェクト: rgoo-qmr/SolarSlingShot
        // constructor
        public Satellite(Planet pvPlanet, PositionParams pvPosition, bool pvInOrbit, List <Planet> pvlstPlanets)
        {
            objPlanet = pvPlanet;

            // set the first planet as the home planet
            objHomePlanet = pvPlanet;

            objLastPlanet = pvPlanet;
            objPosition   = pvPosition;

            // update the interplanetary position using a vector

            interPlanetarySpeed = 5;
            interPlanetaryAngle = 0;
            objDirection        = new PositionParams();

            bInOrbit          = pvInOrbit;
            angleAroundPlanet = 0;

            lastInterPlanetaryAngle = 0;
            interPlanetaryIncrement = 0;

            interPlanetaryLaunchAngle = 0;
            bUseZero  = true;
            lastAngle = 0;

            lstPlanetsToVisit = pvlstPlanets;

            // start with an empty list pf planets. When this list matches the list of planets in the system including the home planet the
            // satellite has visited every planet
            lstPlanetsVisited = new List <Planet>();

            distanceTravelled = 0;

            lastPlanetAngle = 0;


            bInitialised   = false;
            bCompletedTrip = false;
        }
コード例 #4
0
ファイル: Sattelite.cs プロジェクト: rgoo-qmr/SolarSlingShot
//  // make the length of direction one
//direction.normalize()

//// set the velocity of the bullet
//bullet.velocity = speed * direction

//// remember, the above code is the same as
//bullet.velocity.x = speed * direction.x
//bullet.velocity.y = speed * direction.y
//// since speed is just a number value, not a vector, it
//// scales both components equalily

        public void UpdateInterPlanetaryPosition2()
        {
            // TODO: how to set the direction based on the current position of the satellite
            PositionParams objDestination = new PositionParams();

            objDestination.PosX = 250;
            objDestination.PosY = 500;

            //PositionParams objDirection = new PositionParams();
            // the above code is really just shorthand for
//direction.x = player.position.x - turret.position.x
//direction.y = player.position.y - turret.position.y
            objDirection.PosX = objDestination.PosX - objPosition.PosX;
            objDirection.PosY = objDestination.PosY - objPosition.PosY;



            NormalizePos(objDirection);

            // TODO: check for overshoot destination should always be edge of screen - up to code to check whether we have gone into orbit again)
            objPosition.PosX = objPosition.PosX + (interPlanetarySpeed * objDirection.PosX);
            // TODO: check for overshoot
            objPosition.PosY = objPosition.PosY + (interPlanetarySpeed * objDirection.PosY);
        }
コード例 #5
0
        // constructor loads the objects in the system
        public MainWindow()
        {
            InitializeComponent();


            // initialise the model
            lstPlanets  = new List <Planet>();
            lstPlanetUI = new List <PlanetUI>();


            NINETY_DEGREES_AS_RADIANS = 90 * (Pi / 180);
            // sun
            {
                PositionParams objSunPosition = new PositionParams();

                objSunPosition.PosX     = 550;
                objSunPosition.PosY     = 500;
                objSunPosition.Angle    = 100;
                objSunPosition.Velocity = 0;


                objSun = new Sun(objSunPosition);

                objSunPlanet = new Planet(objSun, objSunPosition, "Sun", 40);

                Ellipse objSunEllipse = new Ellipse();
                objSunEllipse.Stroke = System.Windows.Media.Brushes.Orange;
                objSunEllipse.Fill   = System.Windows.Media.Brushes.Yellow;
                objSunEllipse.HorizontalAlignment = HorizontalAlignment.Left;
                objSunEllipse.VerticalAlignment   = VerticalAlignment.Center;
                objSunEllipse.Width  = 30;
                objSunEllipse.Height = 30;
                objSunUI             = new PlanetUI(objSunPlanet, objSunEllipse);

                Canvas.SetLeft(objSunUI.Ellipse, objSunPosition.PosX);
                Canvas.SetTop(objSunUI.Ellipse, objSunPosition.PosY);

                mainCanvas.Children.Add(objSunUI.Ellipse);
            }

            // mars
            {
                PositionParams objPlanetParams = new PositionParams();
                objPlanetParams.PosX  = 250;
                objPlanetParams.PosY  = 250;
                objPlanetParams.Angle = 100;
                // was 0.003
                objPlanetParams.Velocity = 0.005;
                // was 400
                objPlanetParams.Radius = 200;

                double dblMarsPullRadius = 20;
                objPlanet = new Planet(objSun, objPlanetParams, "Mars", dblMarsPullRadius);
                lstPlanets.Add(objPlanet);

                Ellipse objPlanetEllipse = new Ellipse();
                objPlanetEllipse.Stroke = System.Windows.Media.Brushes.Red;
                objPlanetEllipse.Fill   = System.Windows.Media.Brushes.DarkBlue;
                objPlanetEllipse.HorizontalAlignment = HorizontalAlignment.Left;
                objPlanetEllipse.VerticalAlignment   = VerticalAlignment.Center;
                objPlanetEllipse.Width  = 10;
                objPlanetEllipse.Height = 10;
                objPlanetUI             = new PlanetUI(objPlanet, objPlanetEllipse);
                lstPlanetUI.Add(objPlanetUI);

                Canvas.SetLeft(objPlanetUI.Ellipse, objPlanetParams.PosX);
                Canvas.SetTop(objPlanetUI.Ellipse, objPlanetParams.PosY);

                mainCanvas.Children.Add(objPlanetUI.Ellipse);

                // moon around mars
                //{
                //    PositionParams objMoonParams = new PositionParams();
                //    objMoonParams.PosX = 50;
                //    objMoonParams.PosY = 50;
                //    objMoonParams.Angle = 100;
                //    // was 0.003
                //    objMoonParams.Velocity = 0.070;
                //    // was 400
                //    objMoonParams.Radius = 50;

                //    double dblMoonPullRadius = 10;
                //    objPlanetMoon = new Planet(objPlanet, objMoonParams, "MarsMoon", dblMoonPullRadius);
                //    lstPlanets.Add(objPlanetMoon);

                //    Ellipse objMoonEllipse = new Ellipse();
                //    objMoonEllipse.Stroke = System.Windows.Media.Brushes.DarkOrange;
                //    objMoonEllipse.Fill = System.Windows.Media.Brushes.DarkOrange;
                //    objMoonEllipse.HorizontalAlignment = HorizontalAlignment.Left;
                //    objMoonEllipse.VerticalAlignment = VerticalAlignment.Center;
                //    objMoonEllipse.Width = 5;
                //    objMoonEllipse.Height = 5;
                //    objPlanetMoonUI = new PlanetUI(objPlanetMoon, objMoonEllipse);
                //    lstPlanetUI.Add(objPlanetMoonUI);

                //    Canvas.SetLeft(objPlanetMoonUI.Ellipse, objMoonParams.PosX);
                //    Canvas.SetTop(objPlanetMoonUI.Ellipse, objMoonParams.PosY);

                //    mainCanvas.Children.Add(objPlanetMoonUI.Ellipse);


                //}
            }



            // earth
            {
                PositionParams objPlanet2Params = new PositionParams();
                objPlanet2Params.PosX     = 150;
                objPlanet2Params.PosY     = 150;
                objPlanet2Params.Angle    = 100;
                objPlanet2Params.Velocity = 0.01;
                objPlanet2Params.Radius   = 150;


                double dblEarthPullRadius = 15;
                objPlanet2 = new Planet(objSun, objPlanet2Params, "Earth", dblEarthPullRadius);
                lstPlanets.Add(objPlanet2);

                Ellipse objPlanet2Ellipse = new Ellipse();
                objPlanet2Ellipse.Stroke = System.Windows.Media.Brushes.Blue;
                objPlanet2Ellipse.Fill   = System.Windows.Media.Brushes.LightBlue;
                objPlanet2Ellipse.HorizontalAlignment = HorizontalAlignment.Left;
                objPlanet2Ellipse.VerticalAlignment   = VerticalAlignment.Center;
                objPlanet2Ellipse.Width  = 10;
                objPlanet2Ellipse.Height = 10;
                objPlanetUI2             = new PlanetUI(objPlanet2, objPlanet2Ellipse);
                lstPlanetUI.Add(objPlanetUI2);

                Canvas.SetLeft(objPlanetUI2.Ellipse, objPlanet2Params.PosX);
                Canvas.SetTop(objPlanetUI2.Ellipse, objPlanet2Params.PosY);

                mainCanvas.Children.Add(objPlanetUI2.Ellipse);
            }

            // venus
            {
                PositionParams objPlanet3Params = new PositionParams();
                objPlanet3Params.PosX     = 160;
                objPlanet3Params.PosY     = 160;
                objPlanet3Params.Angle    = 100;
                objPlanet3Params.Velocity = 0.01;
                objPlanet3Params.Radius   = 50;

                double dblVenusPullRadius = 15;
                objPlanet3 = new Planet(objSun, objPlanet3Params, "Venus", dblVenusPullRadius);
                lstPlanets.Add(objPlanet3);

                Ellipse objPlanet3Ellipse = new Ellipse();
                objPlanet3Ellipse.Stroke = System.Windows.Media.Brushes.Gold;
                objPlanet3Ellipse.Fill   = System.Windows.Media.Brushes.Goldenrod;
                objPlanet3Ellipse.HorizontalAlignment = HorizontalAlignment.Left;
                objPlanet3Ellipse.VerticalAlignment   = VerticalAlignment.Center;
                objPlanet3Ellipse.Width  = 10;
                objPlanet3Ellipse.Height = 10;
                objPlanetUI3             = new PlanetUI(objPlanet3, objPlanet3Ellipse);
                lstPlanetUI.Add(objPlanetUI3);

                Canvas.SetLeft(objPlanetUI3.Ellipse, objPlanet3Params.PosX);
                Canvas.SetTop(objPlanetUI3.Ellipse, objPlanet3Params.PosY);

                mainCanvas.Children.Add(objPlanetUI3.Ellipse);
            }

            // Jupiter
            {
                PositionParams objPlanet4Params = new PositionParams();
                objPlanet4Params.PosX     = 165;
                objPlanet4Params.PosY     = 165;
                objPlanet4Params.Angle    = 100;
                objPlanet4Params.Velocity = 0.009;
                objPlanet4Params.Radius   = 420;

                double dblSaturnPullRadius = 30;
                objPlanet4 = new Planet(objSun, objPlanet4Params, "Jupiter", dblSaturnPullRadius);
                lstPlanets.Add(objPlanet4);

                Ellipse objPlanet4Ellipse = new Ellipse();
                objPlanet4Ellipse.Stroke = System.Windows.Media.Brushes.Blue;
                objPlanet4Ellipse.Fill   = System.Windows.Media.Brushes.DarkBlue;
                objPlanet4Ellipse.HorizontalAlignment = HorizontalAlignment.Left;
                objPlanet4Ellipse.VerticalAlignment   = VerticalAlignment.Center;
                objPlanet4Ellipse.Width  = 12;
                objPlanet4Ellipse.Height = 12;
                objPlanetUI4             = new PlanetUI(objPlanet4, objPlanet4Ellipse);
                lstPlanetUI.Add(objPlanetUI4);

                Canvas.SetLeft(objPlanetUI4.Ellipse, objPlanet4Params.PosX);
                Canvas.SetTop(objPlanetUI4.Ellipse, objPlanet4Params.PosY);

                mainCanvas.Children.Add(objPlanetUI4.Ellipse);
            }

            // saturn
            {
                PositionParams objPlanet5Params = new PositionParams();
                objPlanet5Params.PosX     = 170;
                objPlanet5Params.PosY     = 170;
                objPlanet5Params.Angle    = 100;
                objPlanet5Params.Velocity = 0.008;
                objPlanet5Params.Radius   = 450;

                double dblPlanet5PullRadius = 40;
                objPlanet5 = new Planet(objSun, objPlanet5Params, "Saturn", dblPlanet5PullRadius);
                lstPlanets.Add(objPlanet5);

                Ellipse objPlanet5Ellipse = new Ellipse();
                objPlanet5Ellipse.Stroke = System.Windows.Media.Brushes.Green;
                objPlanet5Ellipse.Fill   = System.Windows.Media.Brushes.DarkGreen;
                objPlanet5Ellipse.HorizontalAlignment = HorizontalAlignment.Left;
                objPlanet5Ellipse.VerticalAlignment   = VerticalAlignment.Center;
                objPlanet5Ellipse.Width  = 15;
                objPlanet5Ellipse.Height = 15;
                objPlanetUI5             = new PlanetUI(objPlanet5, objPlanet5Ellipse);
                lstPlanetUI.Add(objPlanetUI5);

                Canvas.SetLeft(objPlanetUI5.Ellipse, objPlanet5Params.PosX);
                Canvas.SetTop(objPlanetUI5.Ellipse, objPlanet5Params.PosY);

                mainCanvas.Children.Add(objPlanetUI5.Ellipse);
            }

            // satellite
            {
                PositionParams objSatelliteParams = new PositionParams();
                objSatelliteParams.PosX  = 0;
                objSatelliteParams.PosY  = 0;
                objSatelliteParams.Angle = 100;
                // 20/11/16 original test params
                objSatelliteParams.Velocity = 0.08;
                //objSatelliteParams.Radius = 20;
                //objSatelliteParams.Velocity = 0.2;
                // was 40
                objSatelliteParams.Radius = 20;

                // start round earth
                objSatellite = new Satellite(objPlanet2, objSatelliteParams, false, lstPlanets);

                Ellipse objSatelliteEllipse = new Ellipse();
                objSatelliteEllipse.Stroke = System.Windows.Media.Brushes.Black;
                objSatelliteEllipse.Fill   = System.Windows.Media.Brushes.Red;
                objSatelliteEllipse.HorizontalAlignment = HorizontalAlignment.Left;
                objSatelliteEllipse.VerticalAlignment   = VerticalAlignment.Center;
                objSatelliteEllipse.Width  = 10;
                objSatelliteEllipse.Height = 10;
                objSatelliteUI             = new SatelliteUI(objSatellite, objSatelliteEllipse);

                Canvas.SetLeft(objSatelliteUI.Ellipse, objSatelliteParams.PosX);
                Canvas.SetTop(objSatelliteUI.Ellipse, objSatelliteParams.PosY);

                mainCanvas.Children.Add(objSatelliteUI.Ellipse);
            }



            // initialise view observer
            objViewObserver = new ViewObserver(this, lstPlanetUI, objSatelliteUI);

            // initialise runitme controller
            objTravellerRunTime = new TravellerRunTime(lstPlanets, objSatellite, objSun, objViewObserver);

            // set true to use debugging window
            bDebug = false;
            if (bDebug)
            {
                bTracePlanets   = false;
                bTraceSatOrbit  = false;
                bTraceSatTravel = false;
                bStep           = false;
                objDebugWindow  = new DebugWindow(this);
                objDebugWindow.Show();
            }

            // start the main thread running
            objTravellerRunTime.StartRunning();
        }
コード例 #6
0
 public Sun(PositionParams pvPosition)
 {
     objPosition = pvPosition;
 }