コード例 #1
0
        private void CalculateExtendedParameters()
        {
            if (IsStationary)
            {
                return;
            }
            // Calculate extended parameters.
            // http://en.wikipedia.org/wiki/Standard_gravitational_parameter#Two_bodies_orbiting_each_other
            GravitationalParameter_Km3S2 = GMath.GravitationalParameter_Km3s2(_parentMass + _myMass);  // Normalize GravitationalParameter from m^3/s^2 to km^3/s^2
            GravitationalParameterAU     = GMath.GrabitiationalParameter_Au3s2(_parentMass + _myMass); // (149597870700 * 149597870700 * 149597870700);
            GravitationalParameter_m3S2  = GMath.StandardGravitationalParameter(_parentMass + _myMass);

            double orbitalPeriod = 2 * Math.PI * Math.Sqrt(Math.Pow(Distance.AuToKm(SemiMajorAxis_AU), 3) / (GravitationalParameter_Km3S2));

            if (orbitalPeriod * 10000000 > long.MaxValue)
            {
                OrbitalPeriod = TimeSpan.MaxValue;
            }
            else
            {
                OrbitalPeriod = TimeSpan.FromSeconds(orbitalPeriod);
            }

            // http://en.wikipedia.org/wiki/Mean_motion
            MeanMotion_DegreesSec = Math.Sqrt(GravitationalParameter_Km3S2 / Math.Pow(Distance.AuToKm(SemiMajorAxis_AU), 3)); // Calculated in radians.
            MeanMotion_DegreesSec = Angle.ToDegrees(MeanMotion_DegreesSec);                                                   // Stored in degrees.

            Apoapsis_AU  = (1 + Eccentricity) * SemiMajorAxis_AU;
            Periapsis_AU = (1 - Eccentricity) * SemiMajorAxis_AU;

            SOI_m = OrbitMath.GetSOI(SemiMajorAxis, _myMass, _parentMass);
        }
コード例 #2
0
ファイル: OrbitProcessor.cs プロジェクト: UberWaffe/Pulsar4x
        /// <summary>
        /// Gets the SOI radius of a given body.
        /// </summary>
        /// <returns>The SOI radius in AU</returns>
        /// <param name="entity">Entity which has OrbitDB and MassVolumeDB</param>
        public static double GetSOI(Entity entity)
        {
            var orbitDB = entity.GetDataBlob <OrbitDB>();

            if (orbitDB.Parent != null) //if we're not the parent star
            {
                var semiMajAxis = orbitDB.SemiMajorAxis;

                var myMass = entity.GetDataBlob <MassVolumeDB>().Mass;

                var parentMass = orbitDB.Parent.GetDataBlob <MassVolumeDB>().Mass;

                return(OrbitMath.GetSOI(semiMajAxis, myMass, parentMass));
            }
            else
            {
                return(double.MaxValue); //if we're the parent star, then soi is infinate.
            }
        }