void ParametersToObtit(object[] input, object[] output) { DateTime dt = (DateTime)input[6]; double time = dt.DateTimeToDay(); for (int i = 0; i < 3; i++) { position[i] = (double)input[i]; velocity[i] = (double)input[i + 3]; } double pericenterDistance; double eccentricity; double inclination; double ascendingNode; double argOfPeriapsis; double meanAnomalyAtEpoch; double period; EllipticalOrbit.StateVectorToOrbit(position, velocity, GravityConst, time, out eccentricity, out pericenterDistance, out inclination, out ascendingNode, out argOfPeriapsis, out meanAnomalyAtEpoch, out period); output[0] = pericenterDistance; output[1] = eccentricity; output[2] = inclination; output[3] = ascendingNode; output[4] = argOfPeriapsis; output[5] = meanAnomalyAtEpoch; output[6] = period; }
private void ChangeOrbitPrivate() { timeCoefficient = TimeType.Day.Convert(tuple.Item2.TimeType, 1); double[] or = tuple.Item5; double period = EllipticalOrbit.PeriodFromPericenterDistance(GravityConst, or[1], or[0]); double epoch = tuple.Item7.DateTimeToDay(); PhysicalUnitTypeAttribute attr = tuple.Item2; orbit = new EllipticalOrbit(or[0], or[1], attr.ToRadians(or[2]), attr.ToRadians(or[3]), attr.ToRadians(or[4]), attr.ToRadians(or[5]), period, epoch); double[] d = tuple.Rest.Item2; if (d[0] == 0) { calculateTime = CalculateTime; } else { double meanMotion = (2.0 * Math.PI) / orbit.Period; firstDer = meanMotion * d[0]; if (d[1] == 0) { calculateTime = CalculateTimeFD; } else { secondDer = meanMotion * d[1]; calculateTime = CalculateTimeSD; } } }
public void SetMotionParameters(double[] motionParameters, DateTime time) { double pericenterDistance; double eccentricity; double inclination; double ascendingNode; double argOfPeriapsis; double meanAnomalyAtEpoch; double period; Array.Copy(motionParameters, position, 3); Array.Copy(motionParameters, 3, velocity, 0, 3); EllipticalOrbit.StateVectorToOrbit(position, velocity, GravityConst, time.DateTimeToDay(), out eccentricity, out pericenterDistance, out inclination, out ascendingNode, out argOfPeriapsis, out meanAnomalyAtEpoch, out period); double[] x = tuple.Item5; x[0] = pericenterDistance; x[1] = eccentricity; x[2] = inclination; x[3] = ascendingNode; x[4] = argOfPeriapsis; x[5] = meanAnomalyAtEpoch; Tuple = new Tuple <TransfomationType, PhysicalUnitTypeAttribute, bool, double, double[], byte[], DateTime, Tuple <Dictionary <int, string>, double[]> > (tuple.Item1, tuple.Item2, tuple.Item3, tuple.Item4, tuple.Item5, tuple.Item6, time, tuple.Rest); }
public void EllipticalOrbitParameterChange() { var ellipticalOrbit = new EllipticalOrbit(Planet); ellipticalOrbit.SetOrbitalParameters(240, 182); // The Apoapsis should be 240 while the Periapsis should be 182 respectively. Assert.AreEqual(240, ellipticalOrbit.OrbitalParameters["Apoapsis"]); Assert.AreEqual(182, ellipticalOrbit.OrbitalParameters["Periapsis"]); }
public void OrbitToParameters( double pericenterDistance, double eccentricity, double inclination, double ascendingNode, double argOfPeriapsis, double meanAnomalyAtEpoch, double period, DateTime epoch, DateTime time, double[] vector) { CelestialMechanics.Orbit o = new EllipticalOrbit(pericenterDistance, eccentricity, inclination, ascendingNode, argOfPeriapsis, meanAnomalyAtEpoch, period, epoch.DateTimeToDay()); o.vectorAtTime(time.DateTimeToDay(), vector); }
public void EllipticalOrbitInitialization() { var ellipticalOrbit = new EllipticalOrbit(Star); // Assert that the target objects are the same; Assert.IsTrue(Star.CompareObject(ellipticalOrbit.Target)); // Assert that the 'StepName' is correct. Assert.AreEqual("Kerbol Elliptical Orbit", ellipticalOrbit.StepName); // Assert that the 'StepID' is 'EllipticalOrbit' since this is the EllipticalOrbit class. Assert.AreEqual(StepID.EllipticalOrbit, ellipticalOrbit.StepID); // Assert that the 'elliptialOrbitalParameters' dictionary has been instantiated. Assert.AreEqual(0, ellipticalOrbit.OrbitalParameters["Apoapsis"]); Assert.AreEqual(0, ellipticalOrbit.OrbitalParameters["Periapsis"]); // Assert that we can AeroBrake since the star has an atmosphere. We might get a bit toasty! Assert.IsTrue(ellipticalOrbit.CanAeroBrake); }
void Change(IAlias alias, string name) { PhysicalUnitTypeAttribute source = StaticExtensionBaseTypesExtended.GetPhysicalType(alias); IList <string> l = alias.AliasNames; try { Dictionary <string, double> d = alias.ConvertPhysicalUnits(source, tuple.Item2); double[] p = tuple.Item5; foreach (string key in d.Keys) { int k = aliasList.IndexOf(key); if ((k >= 0) & (k < 6)) { p[k] = d[key]; } } double period = 2 * Math.PI / d["Mean Motion"]; p[0] = EllipticalOrbit.PericenterDistanceFromPeriod(GravityConst, d["Eccentricity"], period); double[] der = tuple.Rest.Item2; string[] str = new string[] { "FD MeanMotion", "SD MeanMotion" }; for (int i = 0; i < str.Length; i++) { string key = str[i]; der[i] = d.ContainsKey(key) ? (double)d[key] : 0; } Tuple = new Tuple <TransfomationType, PhysicalUnitTypeAttribute, bool, double, double[], byte[], DateTime, Tuple <Dictionary <int, string>, double[]> >( tuple.Item1, tuple.Item2, tuple.Item3, d["Mass"], p, tuple.Item6, (DateTime)alias[Epoch], tuple.Rest); ChangeOrbitPrivate(); } catch (Exception) { } }