Exemple #1
0
        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;
        }
Exemple #2
0
        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;
                }
            }
        }
Exemple #3
0
        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"]);
        }
Exemple #5
0
 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);
        }
Exemple #7
0
        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)
            {
            }
        }