/// <summary> /// Currently this only calculates the change in velocity from 0 to planet radius +* 0.33333. /// TODO: add gravity drag and atmosphere drag, and tech improvements for such. /// </summary> /// <param name="planetEntity"></param> /// <param name="payload"></param> /// <returns></returns> public static double FuelCostToLowOrbit(Entity planetEntity, double payload) { var lowOrbit = LowOrbitRadius(planetEntity); var exaustVelocity = 275; var sgp = OrbitMath.CalculateStandardGravityParameter(payload, planetEntity.GetDataBlob <MassVolumeDB>().Mass); Vector3 pos = new Vector3(lowOrbit, 0, 0); var vel = OrbitMath.ObjectLocalVelocityPolar(sgp, pos, lowOrbit, 0, 0, 0); var fuelCost = OrbitMath.TsiolkovskyFuelCost(payload, exaustVelocity, vel.speed); return(fuelCost); }
/// <summary> /// PreciseOrbital Velocy in polar coordinates /// /// </summary> /// <returns>item1 is speed, item2 angle</returns> /// <param name="orbit">Orbit.</param> /// <param name="atDateTime">At date time.</param> public static (double speed, double heading) InstantaneousOrbitalVelocityPolarCoordinate(OrbitDB orbit, DateTime atDateTime) { var position = GetPosition_AU(orbit, atDateTime); var sma = orbit.SemiMajorAxis_AU; if (orbit.GravitationalParameter_Km3S2 == 0 || sma == 0) { return(0, 0); //so we're not returning NaN; } var sgp = orbit.GravitationalParameterAU; double e = orbit.Eccentricity; double trueAnomaly = GetTrueAnomaly(orbit, atDateTime); double aoP = orbit.ArgumentOfPeriapsis; (double speed, double heading)polar = OrbitMath.ObjectLocalVelocityPolar(sgp, position, sma, e, trueAnomaly, aoP); return(polar); }