using System; using System.Collections.Generic; namespace Model { public class CruiseFuelConsumptionProvider_AC313A { public static double[] fuelData = new double[] { }; public static double GetCruiseFuelConsumption(double temperature, double weight, double altitude) { int index = GetCruiseIndex(temperature, weight, altitude); if (index == -1) { throw new ArgumentException("Invalid input."); } return fuelData[index]; } private static int GetCruiseIndex(double temperature, double weight, double altitude) { // 根据输入的温度、重量、高度确定索引 if (temperature >= 30) { if (weight < 10000) return 0; else if (weight <= 12000) return 1; else return 2; } else if (temperature >= 20 && temperature < 30) { if (weight < 10000) return 3; else if (weight <= 12000) return 4; else return 5; } else if (temperature >= 10 && temperature < 20) { if (altitude <= 4000) { if (weight < 10000) return 6; else if (weight <= 12000) return 7; else return 8; } else { if (weight < 10000) return 9; else if (weight <= 12000) return 10; else return 11; } } else if (temperature >= 0 && temperature < 10) { if (altitude <= 4000) { if (weight < 10000) return 12; else if (weight <= 12000) return 13; else return 14; } else { if (weight < 10000) return 15; else if (weight <= 12000) return 16; else return 17; } } else if (temperature >= -10 && temperature < 0) { if (altitude <= 4000) { if (weight < 10000) return 18; else if (weight <= 12000) return 19; else return 20; } else { if (weight < 10000) return 21; else if (weight <= 12000) return 22; else return 23; } } else if (temperature >= -20 && temperature < -10) { if (altitude <= 4000) { if (weight < 10000) return 24; else if (weight <= 12000) return 25; else return 26; } else { if (weight < 10000) return 27; else if (weight <= 12000) return 28; else return 29; } } else if (temperature >= -30 && temperature < -20) { if (weight < 10000) return 30; else if (weight <= 12000) return 31; else return 32; } else if (temperature < -30) { if (weight < 10000) return 33; else if (weight <= 12000) return 34; else return 35; } return -1; // 无效输入 } } public class ClimbFuelConsumptionProvider_AC313A { // TODO 查询数据库 private static double[] ClimbFuelData = new double[] { }; public static double GetClimbFuelConsumption(double temperature, double weight, double altitude) { int index = GetClimbFlightIndex(temperature, weight, altitude); if (index == -1) { throw new ArgumentException("Invalid input."); } return ClimbFuelData[index]; } private static int GetClimbFlightIndex(double temperature, double weight, double altitude) { var temperatureRanges = new List<(double, double)> { (0, 20), (20, double.MaxValue), (double.MinValue, 0) }; var weightRanges = new List<(double, double)> { (double.MinValue, 10000), (10000, 12000), (12000, double.MaxValue) }; var altitudeRanges = new List<(double, double)> { (double.MinValue, 1000), (1000, 2000), (2000, 3000), (3000, 4000), (4000, 5000), (5000, 6000), (6000, double.MaxValue) }; int temperatureIndex = GetIndexFromRange(temperature, temperatureRanges); int weightIndex = GetIndexFromRange(weight, weightRanges); int altitudeIndex = GetIndexFromRange(altitude, altitudeRanges); if (temperatureIndex == -1 || weightIndex == -1 || altitudeIndex == -1) { return -1; } return temperatureIndex * altitudeRanges.Count * weightRanges.Count + altitudeIndex * weightRanges.Count + weightIndex; } private static int GetIndexFromRange(double value, List<(double, double)> ranges) { for (int i = 0; i < ranges.Count; i++) { if (value > ranges[i].Item1 && value <= ranges[i].Item2) { return i; } } return -1; } } public class DescentFuelConsumptionProvider_AC313A { public static double GetDescentFuelConsumption(double temperature, double weight, double altitude) { double a = CruiseFuelConsumptionProvider_AC313A.GetCruiseFuelConsumption(temperature, weight, altitude); double b = ClimbFuelConsumptionProvider_AC313A.GetClimbFuelConsumption(temperature, weight, altitude); return a - (b - a); } } public class CruiseFuelConsumptionProvider_AG600 { private static double[] CruiseFuelData = new double[] { }; public static double GetCruiseFuelConsumption(double temperature, double weight, double altitude) { int index = GetCruiseFlightIndex(temperature, weight, altitude); if (index == -1) { throw new ArgumentException("Invalid input."); } return CruiseFuelData[index]; } private static int GetCruiseFlightIndex(double temperature, double weight, double altitude) { var weightRanges = new List<(double, double)> { (0, 30000), (30000, double.MaxValue) }; var altitudeRanges = new List<(double, double)> { (0, 3000), (3000, 6000), (6000, double.MaxValue) }; int weightIndex = GetIndexFromRange(weight, weightRanges); int altitudeIndex = GetIndexFromRange(altitude, altitudeRanges); if ( weightIndex == -1 || altitudeIndex == -1) { return -1; } return altitudeIndex * weightRanges.Count + weightIndex; } private static int GetIndexFromRange(double value, List<(double, double)> ranges) { for (int i = 0; i < ranges.Count; i++) { if (value > ranges[i].Item1 && value <= ranges[i].Item2) { return i; } } return -1; } } public class ClimbFuelConsumptionProvider_AG600 { private static double[] ClimbFuelData = new double[] { }; public static double GetClimbFuelConsumption(double temperature, double weight, double altitude) { int index = GetClimbFlightIndex(temperature, weight, altitude); if (index == -1) { throw new ArgumentException("Invalid input."); } return ClimbFuelData[index]; } private static int GetClimbFlightIndex(double temperature, double weight, double altitude) { var weightRanges = new List<(double, double)> { (0, 45000), (45000, 50000), (50000, 55000), (55000, 60000), (60000, double.MaxValue) }; var altitudeRanges = new List<(double, double)> { (0, 1000), (1000, 2000), (2000, 3000), (3000, 4000), (4000, 5000), (5000, 6000), (6000, 7000), (7000, 7600), (7600, double.MaxValue) }; int weightIndex = GetIndexFromRange(weight, weightRanges); int altitudeIndex = GetIndexFromRange(altitude, altitudeRanges); if (weightIndex == -1 || altitudeIndex == -1) { return -1; } return altitudeIndex * weightRanges.Count + weightIndex; } private static int GetIndexFromRange(double value, List<(double, double)> ranges) { for (int i = 0; i < ranges.Count; i++) { if (value > ranges[i].Item1 && value <= ranges[i].Item2) { return i; } } return -1; } } public class DescentFuelConsumptionProvider_AG600 { public static double GetDescentFuelConsumption(double temperature, double weight, double altitude) { double a = CruiseFuelConsumptionProvider_AG600.GetCruiseFuelConsumption(temperature, weight, altitude); double b = ClimbFuelConsumptionProvider_AG600.GetClimbFuelConsumption(temperature, weight, altitude); return a - (b - a); } } public class CruiseFuelConsumptionProvider_AC352 { private static double[] CruiseFuelData = new double[] { }; public static double GetCruiseFuelConsumption(double temperature, double weight, double altitude) { int index = GetCruiseFlightIndex(temperature, weight, altitude); if (index == -1) { throw new ArgumentException("Invalid input."); } return CruiseFuelData[index]; } private static int GetCruiseFlightIndex(double temperature, double weight, double altitude) { var temperatureRanges = new List<(double, double)> { (7.5, double.MaxValue), (-7.5, 7.5), (double.MinValue, -7.5)}; var weightRanges = new List<(double, double)> { (0, 6000), (6000, 7000), (7000, double.MaxValue) }; var altitudeRanges = new List<(double, double)> { (0, 2000), (2000,4000), (4000, double.MaxValue) }; double temperature2 = temperature + 6.5 * weight - 15;//将实际温度转换为ISA int temperatureIndex =GetIndexFromRange(temperature2, temperatureRanges); int weightIndex = GetIndexFromRange(weight, weightRanges); int altitudeIndex = GetIndexFromRange(altitude, altitudeRanges); if (temperatureIndex == -1 ||weightIndex == -1 || altitudeIndex == -1) { return -1; } return temperatureIndex * altitudeRanges.Count * weightRanges.Count + altitudeIndex * weightRanges.Count + weightIndex; } private static int GetIndexFromRange(double value, List<(double, double)> ranges) { for (int i = 0; i < ranges.Count; i++) { if (value > ranges[i].Item1 && value <= ranges[i].Item2) { return i; } } return -1; } } public class ClimbFuelConsumptionProvider_AC352 { private static double[] ClimbFuelData = new double[] { }; public static double GetClimbFuelConsumption(double temperature, double weight, double altitude) { int index = GetClimbFlightIndex(temperature, weight, altitude); if (index == -1) { throw new ArgumentException("Invalid input."); } return ClimbFuelData[index]; } private static int GetClimbFlightIndex(double temperature, double weight, double altitude) { var temperatureRanges = new List<(double, double)> { (7.5, double.MaxValue), (-7.5, 7.5), (double.MinValue, -7.5) }; var weightRanges = new List<(double, double)> { (0, 6000), (6000, 7000), (7000, double.MaxValue) }; var altitudeRanges = new List<(double, double)> { (0, 1000), (1000, 2000), (2000, 3000), (3000, 4000), (4000, 4500), (4500, double.MaxValue) }; int temperatureIndex = GetIndexFromRange(temperature, temperatureRanges); int weightIndex = GetIndexFromRange(weight, weightRanges); int altitudeIndex = GetIndexFromRange(altitude, altitudeRanges); if (temperatureIndex == -1 || weightIndex == -1 || altitudeIndex == -1) { return -1; } return temperatureIndex * altitudeRanges.Count * weightRanges.Count + altitudeIndex * weightRanges.Count + weightIndex; } private static int GetIndexFromRange(double value, List<(double, double)> ranges) { for (int i = 0; i < ranges.Count; i++) { if (value > ranges[i].Item1 && value <= ranges[i].Item2) { return i; } } return -1; } } public class DescentFuelConsumptionProvider_AC352 { public static double GetDescentFuelConsumption(double temperature, double weight, double altitude) { double a = CruiseFuelConsumptionProvider_AC352.GetCruiseFuelConsumption(temperature, weight, altitude); double b = ClimbFuelConsumptionProvider_AC352.GetClimbFuelConsumption(temperature, weight, altitude); return a - (b - a); } } }