void ComputeTimes(Orbit o, Orbit destination, double universalTime)
		{
			if (destination == null || o == null || o.referenceBody.orbit == null)
				return;

			double synodic_period = o.referenceBody.orbit.SynodicPeriod(destination);
			double hohmann_transfer_time = OrbitUtil.GetTransferTime(o.referenceBody.orbit, destination);

			minDepartureTime = universalTime;
			minTransferTime = 3600;

			maxDepartureTime = minDepartureTime + synodic_period * 1.5;
			maxTransferTime = hohmann_transfer_time * 1.5;
			maxArrivalTime.val = (synodic_period + hohmann_transfer_time) * 1.5;
		}
Exemplo n.º 2
0
 // Checks if the given orbit is already used by another vessel, returns true if it can be used safely:
 public static bool CheckOrbitClear(Orbit orbit, double unsafeDistance = 50)
 {
     // TODO: Someone said in the forum, that this does not prevent one from launching a vessel into another vessel ...
     foreach (Vessel vessel in FlightGlobals.Vessels)
     {
         if (vessel.situation != Vessel.Situations.ORBITING)
         {
             continue;
         }
         if (vessel.orbit == null || vessel.orbit.referenceBody != orbit.referenceBody)
         {
             continue;
         }
         double orbitalDistance = OrbitUtil.GetSmaDistance(vessel.orbit, orbit);
         if (Math.Abs(orbitalDistance) < unsafeDistance)
         {
             Debug.Log("[KSTS] dangerous orbit: " + orbitalDistance.ToString() + "m to " + vessel.vesselName);
             return(false);
         }
     }
     return(true);
 }
Exemplo n.º 3
0
        void ComputeTimes(Orbit o, Orbit destination, double universalTime)
        {
            if (destination == null || o == null || o.referenceBody.orbit == null)
            {
                return;
            }

            double synodic_period        = o.referenceBody.orbit.SynodicPeriod(destination);
            double hohmann_transfer_time = OrbitUtil.GetTransferTime(o.referenceBody.orbit, destination);

            // Both orbit have the same period
            if (double.IsInfinity(synodic_period))
            {
                synodic_period = o.referenceBody.orbit.period;
            }

            minDepartureTime = universalTime;
            minTransferTime  = 3600;

            maxDepartureTime   = minDepartureTime + synodic_period * 1.5;
            maxTransferTime    = hohmann_transfer_time * 2.0;
            maxArrivalTime.val = synodic_period * 1.5 + hohmann_transfer_time * 2.0;
        }
Exemplo n.º 4
0
 /// <summary>
 ///  依据卫星轨道参数获取卫星位置。
 /// </summary>
 /// <param name="record"></param>
 /// <param name="gpstime"></param>
 /// <returns></returns>
 public static XYZ GetSatPos(EphemerisParam record, Time gpstime)
 {
     return(OrbitUtil.GetSatXyz(record, gpstime.SecondsOfWeek));
 }