public void LambertTest()
 {
     /*
     Vector3 EarthRad = Earth.Heliocentric(2457239 - 2451545);
     Vector3 MarsRad = Mars.Heliocentric(2457239 - 2451545 + 150);
     double time = 150;
     */
     Vector3 EarthRad = new Vector3(4.440778960961146E+07, - 1.454625135657227E+08,  7.039903338298202E+03);
     Vector3 MarsRad = new Vector3(8.550441288420311E+07, 2.098123095830674E+08, 2.299312316831380E+06);
     double time = 2459219- 2459039;
     Vector3 Vout = new Lambert().Solver(EarthRad, MarsRad, time, "pro", "V1");
     double LambertIs = Vout.Magnitude();
     double ShouldBe = 32.9054;
     Assert.AreEqual(LambertIs, ShouldBe, .05);
     
 }
Example #2
0
        private void RunPorkchop(object sender, DoWorkEventArgs e)
        {
            List <object> objlist = e.Argument as List <object>;

            double[] depart    = (double[])objlist[0];
            double[] arrive    = (double[])objlist[1];
            double[] departVel = (double[])objlist[2];
            string   Plan1Name = (string)objlist[3];
            string   Plan2Name = (string)objlist[4];
            Planet   Plan1     = (Planet)objlist[5];
            Planet   Plan2     = (Planet)objlist[6];
            int      DLength   = depart.Length;
            int      state     = 0;

            Parallel.For(0, arrive.Length, new ParallelOptions {
                MaxDegreeOfParallelism = 3
            }, arriveinc =>
            {
                double[] Depart = { 0 };

                Depart = depart;

                //Console.WriteLine(arriveinc);
                double ArriveTime = arrive[arriveinc];
                Vector3 Rad2      = Plan2.Heliocentric(ArriveTime - 2451545);

                for (int departinc = 0; departinc < DLength; departinc++)
                {
                    double temp       = 0;
                    double departTime = Depart[departinc];
                    Vector3 Rad1      = new Vector3();
                    Rad1             = Plan1.Heliocentric(departTime - 2451545);
                    Vector3 VelPlan1 = Plan1.HeliocentricVelocity(departTime - 2451545);
                    Vector3 Vel1     = new Vector3();
                    if (ArriveTime - departTime > 10)
                    {
                        Lambert L1 = new Lambert();
                        Vel1       = L1.Solver(Rad1, Rad2, ArriveTime - departTime, "pro", "V1");
                    }
                    else
                    {
                        Vel1 = new Vector3(999, 999, 999);
                    }
                    Vel1 = new Vector3(Vel1.x - VelPlan1.x, Vel1.y - VelPlan1.y, Vel1.z - VelPlan1.z);
                    temp = Vel1.Magnitude();
                    lock (departVel)
                    {
                        departVel[arriveinc * DLength + departinc] = temp;
                    }
                }
                Interlocked.Increment(ref state);
            }
                         );
            List <object> resultList = new List <object>();

            resultList.Add(depart);
            resultList.Add(arrive);
            resultList.Add(departVel);
            resultList.Add(Plan1Name);
            resultList.Add(Plan2Name);
            e.Result = resultList;
        }
Example #3
0
        private void RunPorkchop(object sender, DoWorkEventArgs e)
        {
            List<object> objlist = e.Argument as List<object>;
            double[] depart = (double[])objlist[0];
            double[] arrive = (double[])objlist[1];
            double[] departVel = (double[])objlist[2];
            string Plan1Name = (string)objlist[3];
            string Plan2Name = (string)objlist[4];
            Planet Plan1 = (Planet)objlist[5];
            Planet Plan2 = (Planet)objlist[6];
            int DLength = depart.Length;
            int state = 0;
            Parallel.For(0, arrive.Length, new ParallelOptions { MaxDegreeOfParallelism = 3 }, arriveinc =>
            {
                double[] Depart = { 0 };

                Depart = depart;

                //Console.WriteLine(arriveinc);
                double ArriveTime = arrive[arriveinc];
                Vector3 Rad2 = Plan2.Heliocentric(ArriveTime - 2451545);

                for (int departinc = 0; departinc < DLength; departinc++)
                {

                    double temp = 0;
                    double departTime = Depart[departinc];
                    Vector3 Rad1 = new Vector3();
                    Rad1 = Plan1.Heliocentric(departTime - 2451545);
                    Vector3 VelPlan1 = Plan1.HeliocentricVelocity(departTime - 2451545);
                    Vector3 Vel1 = new Vector3();
                    if (ArriveTime - departTime > 10)
                    {
                        Lambert L1 = new Lambert();
                        Vel1 = L1.Solver(Rad1, Rad2, ArriveTime - departTime, "pro", "V1");
                    }
                    else { Vel1 = new Vector3(999, 999, 999); }
                    Vel1 = new Vector3(Vel1.x - VelPlan1.x, Vel1.y - VelPlan1.y, Vel1.z - VelPlan1.z);
                    temp = Vel1.Magnitude();
                    lock (departVel)
                    {
                        departVel[arriveinc * DLength + departinc] = temp;
                    }
                }
                Interlocked.Increment(ref state);
            }
             );
            List<object> resultList = new List<object>();
            resultList.Add(depart);
            resultList.Add(arrive);
            resultList.Add(departVel);
            resultList.Add(Plan1Name);
            resultList.Add(Plan2Name);
            e.Result = resultList;

        }