public double ComputeAngle(double time, double expendedMass) { if (time < KickPitchTime) { return(Radian(LinearBoundedInterpolation(time, InitialVerticalTime, KickPitchTime, 0, KickPitchAngle))); } var activeStage = Rocket.ComputeActiveStage(expendedMass, out double fuelMass); //Console.WriteLine("{0} {1}", activeStage, fuelMass); if (activeStage == 0) { double FuelMassFlowFromKickPitch = Rocket.MassFlow(expendedMass, 1.0, Constants.EarthSurfacePressure, out double specificImpulse, out double thrust); return(Radian(LinearBoundedInterpolation(fuelMass, Rocket.Stages[activeStage].FuelMass - FuelMassFlowFromKickPitch * KickPitchTime, 0, KickPitchAngle, StagingAngle))); } else if (activeStage == 1) { return(Radian(LinearBoundedInterpolation(fuelMass, Rocket.Stages[activeStage].FuelMass, 0, StagingAngle, 90))); } return(90); }