コード例 #1
0
        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);
        }