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