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); }
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; }
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; }