Browse Source

会议修改子任务及相关问题

liyang 6 months ago
parent
commit
aba46faf38

+ 15 - 12
Models/SimulationCommon/FXJHGenenrate.cs

@@ -428,21 +428,24 @@ namespace Model
                     SegmentFlightTime = 0,
                     RemainingFuel = 0,
                 });
-
-                turningPoint.Add(new TurningPoint
-                {
-                    TurningPointName = "转运",
-                    TurningPointLongitude = airRoutes[i].AirRouteLongitude,
-                    TurningPointLatitude = airRoutes[i].AirRouteLatitude,
-                    TurningPointHeight = 1000,
-                    TurningPointType = "转运",
-                    SegmentFlightFuelConsumption = 3,
-                    SegmentFlightTime = 0,
-                    RemainingFuel = 0,
-                });
             }
         }
 
+        public static void ZhaoShuiJiuYuan1(List<AirRoute> airRoutes, ref List<TurningPoint> turningPoint)
+        {
+            turningPoint.Add(new TurningPoint
+            {
+                TurningPointName = "转运",
+                TurningPointLongitude = airRoutes[airRoutes.Count - 1].AirRouteLongitude,
+                TurningPointLatitude = airRoutes[airRoutes.Count - 1].AirRouteLatitude,
+                TurningPointHeight = 1000,
+                TurningPointType = "转运",
+                SegmentFlightFuelConsumption = 3,
+                SegmentFlightTime = 1800,
+                RemainingFuel = 0,
+            });
+        }
+
         public static void SeaSouJiu(FlightPlanEditor editor, ref List<TurningPoint> turningPoints)
         {
             int i;

+ 111 - 41
Models/SimulationCommon/Rectangular_Area_Search_Function.cs

@@ -106,71 +106,120 @@ public class Rectangular_Area_Search_Function
 
     public static List<double[]> MinEnclosingRectangle(Point2f[] hull)
     {
-         double min_rectangular_area = double.PositiveInfinity;
-            List<double[]> Point_muster = new List<double[]>{};
+        double min_rectangular_area = double.PositiveInfinity;
+        List<double[]> Point_muster = new List<double[]> { };
 
-            for (int num = 0; num < hull.Length - 1; num++)
+        for (int num = 0; num < hull.Length - 1; num++)
+        {
+            double[] Base_line = GetLinearEquation(hull[num], hull[num + 1]);
+            double max_Ditance = 0;
+            Point2f Point = hull[num + 1];
+            Point2f Point_left = hull[num + 1];
+            Point2f Point_right = hull[num + 1];
+
+            foreach (Point2f i_point in hull)
             {
-                double[] Base_line = GetLinearEquation(hull[num], hull[num + 1]);
-                double max_Ditance = 0;
-                Point2f Point = hull[num + 1];
+                if ((i_point.X == hull[num].X && i_point.Y == hull[num].Y) ||
+                    (i_point.X == hull[num + 1].X && i_point.Y == hull[num + 1].Y))
+                {
+                    continue;
+                }
+
+                double distance = GetDistance(i_point, Base_line);
 
-                foreach (Point2f i_point in hull)
+                if (distance > max_Ditance)
                 {
-                    if ((i_point.X == hull[num].X && i_point.Y == hull[num].Y) ||
-                        (i_point.X == hull[num + 1].X && i_point.Y == hull[num + 1].Y))
+                    max_Ditance = distance;
+                    Point = i_point;
+                }
+            }
+
+            double[] line_Parallel_Base = GetParallelLine(Point, Base_line);
+
+            double[] line_Perpendicular_Base_right = null;
+            double[] line_Perpendicular_Base_left = null;
+
+            foreach (Point2f j_point in hull)
+            {
+                double[] line_Preparatory = GetpPerpendicular(j_point, Base_line);
+                int point_right = 0;
+                int point_left = 0;
+
+                foreach (Point2f k_point in hull)
+                {
+                    if (k_point.X == j_point.X && k_point.Y == j_point.Y)
                     {
                         continue;
                     }
 
-                    double distance = GetDistance(i_point, Base_line);
-
-                    if (distance > max_Ditance)
+                    //添加点在直线上的条件
+                    if (CheckDirection(k_point, line_Preparatory) <= 0)
+                    {
+                        point_left++;
+                    }
+                    else if (CheckDirection(k_point, line_Preparatory) >= 0)
                     {
-                        max_Ditance = distance;
-                        Point = i_point;
+                        point_right++;
                     }
                 }
 
-                double[] line_Parallel_Base = GetParallelLine(Point, Base_line);
+                if (point_right == hull.Length - 1)
+                {
+                    line_Perpendicular_Base_right = line_Preparatory;
+                }
 
-                double[] line_Perpendicular_Base_right = null;
-                double[] line_Perpendicular_Base_left = null;
+                if (point_left == hull.Length - 1)
+                {
+                    line_Perpendicular_Base_left = line_Preparatory;
+                }
 
-                foreach (Point2f j_point in hull)
+                if (line_Perpendicular_Base_left == null || line_Perpendicular_Base_right == null)
                 {
-                    double[] line_Preparatory = GetpPerpendicular(j_point, Base_line);
-                    int point_right = 0;
-                    int point_left = 0;
+                    double max_Ditance_left = 0;
+                    double distance_left = 0;
+                    double max_Distance_right = 0;
+                    double distance_right = 0;
 
-                    foreach (Point2f k_point in hull)
+                    foreach (Point2f m_point in hull)
                     {
-                        if (k_point.X == j_point.X && k_point.Y == j_point.Y)
+                        if (CheckDirection(m_point, line_Preparatory) <= 0)
                         {
-                            continue;
+                            distance_left = GetDistance(m_point, line_Preparatory);
+                            if (distance_left > max_Ditance_left)
+                            {
+                                max_Ditance_left = distance_left;
+                                Point_left = m_point;
+                                line_Perpendicular_Base_left = GetpPerpendicular(Point_left, Base_line);
+                            }
                         }
-
-                        if (CheckDirection(k_point, line_Preparatory) < 0)
+                        if (CheckDirection(m_point, line_Preparatory) >= 0)
                         {
-                            point_left++;
+                            distance_right = GetDistance(m_point, line_Preparatory);
+                            if (distance_right > max_Distance_right)
+                            {
+                                max_Distance_right = distance_right;
+                                Point_right = m_point;
+                                line_Perpendicular_Base_right = GetpPerpendicular(Point_right, Base_line);
+                            }
                         }
-                        else
-                        {
-                            point_right++;
-                        }
-                    }
 
-                    if (point_right == hull.Length - 1)
-                    {
-                        line_Perpendicular_Base_right = line_Preparatory;
                     }
 
-                    if (point_left == hull.Length - 1)
-                    {
-                        line_Perpendicular_Base_left = line_Preparatory;
-                    }
                 }
+            }
+
+            //foreach (var item in line_Perpendicular_Base_left)
+            //{
+            //    Console.WriteLine("line_Perpendicular_Base_left:" + item);
+            //}
+
+            //foreach (var item in line_Perpendicular_Base_right)
+            //{
+            //    Console.WriteLine("line_Perpendicular_Base_right:" + item);
+            //}
 
+            if (line_Perpendicular_Base_left != null && line_Perpendicular_Base_right != null)
+            {
                 double[] Point0 = GetCrossPoint(Base_line, line_Perpendicular_Base_left);
                 double[] Point1 = GetCrossPoint(Base_line, line_Perpendicular_Base_right);
                 double[] Point2 = GetCrossPoint(line_Parallel_Base, line_Perpendicular_Base_right);
@@ -188,7 +237,28 @@ public class Rectangular_Area_Search_Function
                     };
                 }
             }
-
-            return Point_muster;
+            // double[] Point0 = GetCrossPoint(Base_line, line_Perpendicular_Base_left);
+            // double[] Point1 = GetCrossPoint(Base_line, line_Perpendicular_Base_right);
+            // double[] Point2 = GetCrossPoint(line_Parallel_Base, line_Perpendicular_Base_right);
+            // double[] Point3 = GetCrossPoint(line_Parallel_Base, line_Perpendicular_Base_left);
+            // double rectangular_area = GetRectangularArea(Point0, Point1, Point2, Point3);
+
+            // if (rectangular_area < min_rectangular_area)
+            // {
+            //     min_rectangular_area = rectangular_area;
+            //     Point_muster = new List<double[]> {
+            //         Point0,
+            //         Point1,
+            //         Point2,
+            //         Point3
+            //     };
+            // }
         }
+
+        //foreach (var item in Point_muster)
+        //{
+        //    Console.WriteLine("Point_muster:" + item);
+        //}  
+        return Point_muster;
+    }
 }

+ 35 - 13
SimulationServer/Entity/AircraftKTKS.cs

@@ -87,6 +87,7 @@ public class AircraftKTKS : AircraftEntity
         List<double> KTresultPostion = new List<double>();
 
         double KTheight;
+
         if (taskParameter.isParachute)  //空投空送任务文件读取
         {
             KTheight = 200;
@@ -95,8 +96,8 @@ public class AircraftKTKS : AircraftEntity
             double inix = Mokatuo_lon(KTiniposition[1]);
             double iniy = Mokatuo_lat(KTiniposition[0]);
 
-            double resultX = inix + 33 * Math.Cos(alpha) * KTiniposition[2];
-            double resultY = iniy + 33 * Math.Sin(alpha) * KTiniposition[2];
+            double resultX = inix + 33 * Math.Cos(alpha) * KTiniposition[2] / 1000;
+            double resultY = iniy + 33 * Math.Sin(alpha) * KTiniposition[2] / 1000;
 
             KTresultPostion.Add(ReMokatuo_lat(resultY));
             KTresultPostion.Add(ReMokatuo_lon(resultX));
@@ -108,28 +109,49 @@ public class AircraftKTKS : AircraftEntity
             double inix = Mokatuo_lon(KTiniposition[1]);
             double iniy = Mokatuo_lat(KTiniposition[0]);
 
-            double resultX = inix + 22 * Math.Cos(alpha) * KTiniposition[2];
-            double resultY = iniy + 22 * Math.Sin(alpha) * KTiniposition[2];
+            double resultX = inix + 22 * Math.Cos(alpha) * KTiniposition[2] / 1000;
+            double resultY = iniy + 22 * Math.Sin(alpha) * KTiniposition[2] / 1000;
 
             KTresultPostion.Add(ReMokatuo_lat(resultY));
             KTresultPostion.Add(ReMokatuo_lon(resultX));
         }
 
         TurningPoints.RemoveAt(2);
-        FlightPlanEditor.missionpoint.MissionPointLatitude = KTiniposition[0];
-        FlightPlanEditor.missionpoint.MissionPointLongitude = KTiniposition[1];
-        FlightPlanEditor.missionpoint.MissionPointHeight = KTheight;
 
-        missionpoint.MissionPointLatitude = KTresultPostion[0];
-        missionpoint.MissionPointLongitude = KTresultPostion[1];
-        missionpoint.MissionPointHeight = KTheight;
+        if(taskParameter.airdropWay == "带速空投")
+        {
+            FlightPlanEditor.missionpoint.MissionPointLatitude = KTiniposition[0];
+            FlightPlanEditor.missionpoint.MissionPointLongitude = KTiniposition[1];
+            FlightPlanEditor.missionpoint.MissionPointHeight = KTheight;
+
+            missionpoint.MissionPointLatitude = KTresultPostion[0];
+            missionpoint.MissionPointLongitude = KTresultPostion[1];
+            missionpoint.MissionPointHeight = KTheight;
+
+            missionEndPoint.MissionEndPointLatitude = KTresultPostion[0];
+            missionEndPoint.MissionEndPointLongitude = KTresultPostion[1];
+            missionEndPoint.MissionEndPointHeight = KTheight;
+        }
+
+        else if(taskParameter.airdropWay == "悬停空投")
+        {
+            FlightPlanEditor.missionpoint.MissionPointLatitude = KTiniposition[0];
+            FlightPlanEditor.missionpoint.MissionPointLongitude = KTiniposition[1];
+            FlightPlanEditor.missionpoint.MissionPointHeight = KTheight;
+
+            missionpoint.MissionPointLatitude = KTiniposition[0];
+            missionpoint.MissionPointLongitude = KTiniposition[1];
+            missionpoint.MissionPointHeight = KTheight;
+
+            missionEndPoint.MissionEndPointLatitude = KTiniposition[0];
+            missionEndPoint.MissionEndPointLongitude = KTiniposition[1];
+            missionEndPoint.MissionEndPointHeight = KTheight;
+        }
 
         FXJHGenerate.KouTouKouSong(FlightPlanEditor, ref TurningPoints);
         FXJHGenerate.KouTouKouSong1(missionpoint, ref TurningPoints);
 
-        missionEndPoint.MissionEndPointLatitude = KTresultPostion[0];
-        missionEndPoint.MissionEndPointLongitude = KTresultPostion[1];
-        missionEndPoint.MissionEndPointHeight = KTheight;
+        TurningPoints[2].SegmentFlightTime = KTiniposition[2];
 
         FXJHGenerate.FromMissionToEnd(FlightPlanEditor, missionEndPoint, ref TurningPoints);
         FXJHGenerate.FXJHTPDiedai(FlightPlanEditor, ref TurningPoints, Velocitys, FuelConsumptions); // 更新了 计算油耗的方法

+ 44 - 23
SimulationServer/Entity/AircraftZS.cs

@@ -45,41 +45,62 @@ public class AircraftZS : AircraftEntity
         FlightPlanEditor.missionpoint.MissionPointHeight = FlightPlanEditor.targetpoint[0].TargetPointHeight;
         //Console.WriteLine("MissionPointLatitude:" + FlightPlanEditor.missionpoint.MissionPointLatitude);
 
-        FXJHGenerate.FromStartToMission(FlightPlanEditor, ref TurningPoints);//生成从起点到任务段起点的航路点
-
-        missionEndPoint.MissionEndPointLatitude = FlightPlanEditor.targetpoint[0].TargetPointLatitude;
-        missionEndPoint.MissionEndPointLongitude = FlightPlanEditor.targetpoint[0].TargetPointLongitude;
-        missionEndPoint.MissionEndPointHeight = FlightPlanEditor.targetpoint[0].TargetPointHeight;
+        int count = 0;
+        foreach (var item in taskContent.ZSJYParameters)
+        {
+            //Console.WriteLine("item.AircraftId:" + item.AircraftId);
+            //Console.WriteLine("FlightPlanEditor.aircraftparameter.AircraftID:" + FlightPlanEditor.aircraftparameter.Id);
+            if (item.AircraftId == FlightPlanEditor.aircraftparameter.Id)
+            {
+                double a = (double)taskContent.missionInformation.TaskEndConditions.person_number_Rescue;
+                double b = (double)item.RescuePersonnel;
+                count = (int)Math.Ceiling(a / b);
+                //Console.WriteLine("count:" + count);
+            }
+        }
 
-        airRoutes.Clear();
-        List<double> list = GenerateCircleTrajectory(FlightPlanEditor.targetpoint[0].TargetPointLatitude, FlightPlanEditor.targetpoint[0].TargetPointLongitude, 1, 360);
-        //airRoutes = list
-        Model.AirRoute airRoute = new Model.AirRoute();
-        for (int i = 0; i < list.Count; i++)
+        for (int j = 0; j < count; j++)
         {
-            if (i % 2 == 0)
+            FXJHGenerate.FromStartToMission(FlightPlanEditor, ref TurningPoints);//生成从起点到任务段起点的航路点
+
+            missionEndPoint.MissionEndPointLatitude = FlightPlanEditor.targetpoint[0].TargetPointLatitude;
+            missionEndPoint.MissionEndPointLongitude = FlightPlanEditor.targetpoint[0].TargetPointLongitude;
+            missionEndPoint.MissionEndPointHeight = FlightPlanEditor.targetpoint[0].TargetPointHeight;
+
+            airRoutes.Clear();
+            List<double> list = GenerateCircleTrajectory(FlightPlanEditor.targetpoint[0].TargetPointLatitude, FlightPlanEditor.targetpoint[0].TargetPointLongitude, 1, 360);
+            //airRoutes = list
+            Model.AirRoute airRoute = new Model.AirRoute();
+            for (int i = 0; i < list.Count; i++)
             {
-                //Console.WriteLine("i0:" + list[i]);
-                airRoute = new Model.AirRoute();
-                airRoute.AirRouteLongitude = list[i];
+                if (i % 2 == 0)
+                {
+                    //Console.WriteLine("i0:" + list[i]);
+                    airRoute = new Model.AirRoute();
+                    airRoute.AirRouteLongitude = list[i];
+                }
+                else
+                {
+                    //Console.WriteLine("i1:" + list[i]);
+                    airRoute.AirRouteLatitude = list[i];
+                    airRoutes.Add(airRoute);
+                }
             }
-            else
+
+            for (int i = 0; i < taskParameter.TurnsNumber; i++)
             {
-                //Console.WriteLine("i1:" + list[i]);
-                airRoute.AirRouteLatitude = list[i];
-                airRoutes.Add(airRoute);
+                FXJHGenerate.ZhaoShuiJiuYuan(airRoutes, ref TurningPoints);
+
             }
-        }
 
-        for (int i = 0; i < taskParameter.TurnsNumber; i++)
-        {
-            FXJHGenerate.ZhaoShuiJiuYuan(airRoutes, ref TurningPoints);
+            FXJHGenerate.ZhaoShuiJiuYuan1(airRoutes, ref TurningPoints);
 
+            FXJHGenerate.FromMissionToEnd(FlightPlanEditor, missionEndPoint, ref TurningPoints);
         }
+
         // FXJHGenerate.InitializeVelocities(FlightPlanEditor, TurningPoints, ref Velocitys);
         // FXJHGenerate.InitializeFuelConsumptions(FlightPlanEditor, TurningPoints,ref FuelConsumptions);
 
-        FXJHGenerate.FromMissionToEnd(FlightPlanEditor, missionEndPoint, ref TurningPoints);
         FXJHGenerate.FXJHTPDiedai(FlightPlanEditor, ref TurningPoints, Velocitys, FuelConsumptions); // 更新了 计算油耗的方法
 
         for (int i = 0; i < TurningPoints.Count; i++) // 总飞行时间

+ 1 - 1
SimulationServer/bin/Debug/net7.0/Missions/editor_config.json

@@ -1,5 +1,5 @@
 {
-    "仿真次数": 3,
+    "仿真次数": 1,
     "想定信息": {
         "想定日期": "2024年6月4日",
         "想定时间": "00时00分00秒"

+ 2 - 2
SimulationServer/bin/Debug/net7.0/Missions/task_config.json

@@ -479,8 +479,8 @@
                     "开伞空投": true,
                     "空投重量": 50,
                     "空投迎风面积": 1.5,
-					"?空投方式": "注释:悬停空投/带速空投",
-					"空投方式": "悬停空投",
+                    "?空投方式": "注释:悬停空投/带速空投",
+                    "空投方式": "带速空投",
                     "空投点": [
                         {
                             "任务点经度": 119.67513528,

BIN
SimulationServer/bin/Debug/net7.0/SimulationCommon.dll


BIN
SimulationServer/bin/Debug/net7.0/SimulationCommon.pdb


BIN
SimulationServer/bin/Debug/net7.0/SimulationServer.dll


BIN
SimulationServer/bin/Debug/net7.0/SimulationServer.exe


BIN
SimulationServer/bin/Debug/net7.0/SimulationServer.pdb