private static void ConversionIntegrityTest(float altitude)
        {
            float derivedPressure = StaticPressureHelper.GetPressure(altitude, SeaLevelStaticPressure);
            float derivedAltitude = StaticPressureHelper.GetAltitude(derivedPressure, SeaLevelStaticPressure);

            AssertWithin(derivedAltitude, altitude, 0.001f);
        }
示例#2
0
        public override void Update(PhysicalHeliState startState, PhysicalHeliState endState, JoystickOutput output, TimeSpan totalSimulationTime, TimeSpan endTime)
        {
            PhysicalHeliState stateToMeasure = endState;
            float             trueAltitude   = stateToMeasure.Position.Y;

            if (IsPerfect)
            {
                Altitude = trueAltitude;
            }
            else
            {
                float simulatedPressure = _pressureProvider.GetSimulatedStaticPressure(trueAltitude);
                Altitude = StaticPressureHelper.GetAltitude(simulatedPressure, SeaLevelStaticPressure);
            }
        }
        public void GetPressureTest()
        {
            float altitude, expected, actual;

            // All expected values are taken from a lookup table
            altitude = 11000f;
            expected = 22632f;
            actual   = StaticPressureHelper.GetPressure(altitude, SeaLevelStaticPressure);
            AssertWithin(actual, expected, 100);

            altitude = 0f;
            expected = 101325f;
            actual   = StaticPressureHelper.GetPressure(altitude, SeaLevelStaticPressure);
            AssertWithin(actual, expected, 100);

            altitude = 5000f;
            expected = 54019f;
            actual   = StaticPressureHelper.GetPressure(altitude, SeaLevelStaticPressure);
            AssertWithin(actual, expected, 100);
        }
        public float GetSimulatedStaticPressure(float trueAltitude)
        {
            float truePressure = StaticPressureHelper.GetPressure(trueAltitude, SeaLevelStaticPresure);

            // If we assume the pressure is rising linearly (although it is not) we would want to further distort the
            // measured pressure by applying non-linearity to the readings.
            Vector2 lowestPressurePlot  = GetPressurePlot(StaticPressureHelper.MinAltitude);
            Vector2 highestPressurePlot = GetPressurePlot(StaticPressureHelper.MaxAltitude);
            var     pressurePlot        = new Vector2(trueAltitude, truePressure);
//            float nonLinearPressure = NonLinearity.SinusOffset(pressurePlot, lowestPressurePlot, highestPressurePlot).Y;
            float nonLinearPressure =
                NonLinearity.SinusOffset(pressurePlot, lowestPressurePlot, highestPressurePlot, 5f, 100).Y;

            // Noise amplitude is selected to give a few meters of variation, both positive and negative
            const float pressurePerMeter       = 11.989f;
            const float noiseAmplitudeMeters   = 0.5f;
            const float noiseAmplitudePressure = noiseAmplitudeMeters * pressurePerMeter;

            return(Noise.WhiteNoise(nonLinearPressure, noiseAmplitudePressure));
        }
        public void GetAltitudeTest()
        {
            float pressure, expected, actual;


            // All expected values are taken from a lookup table
            pressure = 22632;
            expected = 11000;
            actual   = StaticPressureHelper.GetAltitude(pressure, SeaLevelStaticPressure);
            AssertWithin(actual, expected, 100);

            pressure = 101325;
            expected = 0;
            actual   = StaticPressureHelper.GetAltitude(pressure, SeaLevelStaticPressure);
            AssertWithin(actual, expected, 100);

            pressure = 54019;
            expected = 5000;
            actual   = StaticPressureHelper.GetAltitude(pressure, SeaLevelStaticPressure);
            AssertWithin(actual, expected, 100);
        }
 private Vector2 GetPressurePlot(float altitude)
 {
     return(new Vector2(altitude, StaticPressureHelper.GetPressure(altitude, SeaLevelStaticPresure)));
 }