From 4bd08f0355b6b2cf3c027202d5ad301b4e182953 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期五, 31 三月 2023 17:16:22 +0800
Subject: [PATCH] 科目二修改

---
 lib/src/main/cpp/test_items/park_edge.cpp |  128 ++++++++++++++++++------------------------
 1 files changed, 55 insertions(+), 73 deletions(-)

diff --git a/lib/src/main/cpp/test_items/park_edge.cpp b/lib/src/main/cpp/test_items/park_edge.cpp
index 4a4160c..9ac9060 100644
--- a/lib/src/main/cpp/test_items/park_edge.cpp
+++ b/lib/src/main/cpp/test_items/park_edge.cpp
@@ -1,6 +1,17 @@
 //
 // Created by YY on 2019/10/23.
 //
+//
+//               4  ___________________________ 3
+//                  |                         |
+//                  |                         |
+//                  |                         |
+//  ________________|                         |___________1
+//  6               5                         2
+//
+//
+//  7______________________________________________________0
+//
 
 #include "park_edge.h"
 #include "../jni_log.h"
@@ -29,7 +40,6 @@
 
 const uint32_t CHECK_PARK_DELAY = 400;
 
-static int mapIndex = 0;
 static bool reportExamTimeout;
 static bool reportParkFail;
 
@@ -45,24 +55,23 @@
 static int currGear;
 static double odo;
 
-static bool CrashRedLine1(const Polygon *map, const car_model *car);
-static bool CrashRedLine2(const Polygon *map, const car_model *car);
-static bool CrashRedLine3(const Polygon *map, const car_model *car);
-static bool EnterParking(const Polygon *map, const car_model *car);
-static bool ExitParkArea(const Polygon *map, const car_model *car);
-static bool ExitParkArea2(const Polygon *map, const car_model *car);
+static bool CrashRedLine1(const Polygon *map, const car_model_t *car);
+static bool CrashRedLine2(const Polygon *map, const car_model_t *car);
+static bool CrashRedLine3(const Polygon *map, const car_model_t *car);
+static bool EnterParking(const Polygon *map, const car_model_t *car);
+static bool ExitParkArea(const Polygon *map, const car_model_t *car);
+static bool ExitParkArea2(const Polygon *map, const car_model_t *car);
 
-void StartParkEdge(int index, int moveStatus, const struct RtkTime *rtkTime)
+void StartParkEdge(prime_t &prime)
 {
     DEBUG("杩涘叆渚ф柟鍋滆溅鍦哄湴");
 
     testStatus = TESTING;
-    mapIndex = index;
 
     occurCrashRedLine1 = occurCrashRedLine2 = occurCrashRedLine3 = false;        // 杩欎釜绉戠洰瑙勫畾鐗规畩鐐癸紝鍙戠敓涓�娆℃墸10鍒嗭紝鑰屼笉鐩存帴娣樻卑
     reportExamTimeout = false;
     reportParkFail = false;
-    prevMoveStatus = moveStatus;
+    prevMoveStatus = prime.pMotion->move;
     parkSuccess = false;
     parkStatus = 0;
     occurMoveBack = false;
@@ -82,7 +91,7 @@
     }*/
 }
 
-int TestParkEdge(const Polygon *map, const car_model *car, const car_model *carPrev, double speed, int moveStatus, const struct RtkTime *rtkTime)
+int TestParkEdge(prime_t &prime)
 {
     vector<double> dtox;
     vector<Line> line_set;
@@ -128,7 +137,7 @@
                 occurMoveBack = true;
                 moveBackTimePoint = TimeMakeComposite(rtkTime->hh, rtkTime->mm, rtkTime->ss,
                                                       rtkTime->mss * 10);      // 寮�濮嬭鏃�
-                MA_EnterMap(mapIndex, MAP_TYPE_PART_EDGE, 1);
+                MA_EnterMap(mapIndex, MAP_TYPE_PARK_EDGE, 1);
             }
         } else {
             if (occurMoveBack && !checkPark) {
@@ -307,7 +316,7 @@
                 DEBUG("寮�濮嬪�掕溅");
                 occurMoveBack = true;
                 moveBackTimePoint = TimeMakeComposite(rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss*10);
-                MA_EnterMap(mapIndex, MAP_TYPE_PART_EDGE, 1);
+                MA_EnterMap(mapIndex, MAP_TYPE_PARK_EDGE, 1);
             }*/
         }
 
@@ -328,14 +337,43 @@
 TEST_END:
     if (testStatus == TEST_FINISH) {
         DEBUG("渚ф柟鍋滆溅缁撴潫");
-        MA_EnterMap(mapIndex, MAP_TYPE_PART_EDGE, 0);
+        MA_EnterMap(mapIndex, MAP_TYPE_PARK_EDGE, 0);
         return 0;
     }
     return 1;
 }
 
+int EnterParkEdge(prime_t &prime) {
+    if (prime.prev_modeling_index == -1 || prime.curr_modeling_index == -1) {
+        return -1;
+    }
+
+    PointF &lp1 = prime.pModeling[prime.curr_modeling_index].points[prime.pModel->left_front_tire[TIRE_OUTSIDE]];
+    PointF &lp2 = prime.pModeling[prime.prev_modeling_index].points[prime.pModel->left_front_tire[TIRE_OUTSIDE]];
+    PointF &rp1 = prime.pModeling[prime.curr_modeling_index].points[prime.pModel->right_front_tire[TIRE_OUTSIDE]];
+    PointF &rp2 = prime.pModeling[prime.prev_modeling_index].points[prime.pModel->right_front_tire[TIRE_OUTSIDE]];
+
+    Line left_trace, right_trace;
+
+    MAKE_LINE(left_trace, lp1, lp2);
+    MAKE_LINE(right_trace, rp1, rp2);
+
+    // 涓嶅悓鍦板尯宸﹀彸鍊掑簱娆″簭鍙兘涓嶅悓锛屾墍浠ヤ袱涓柟鍚戦兘鍙互杩涘叆
+    for (int i = 0; i < prime.pMap->park_button_map.size(); ++i) {
+        Line left_entrance_line;
+
+        MAKE_LINE(left_entrance_line, prime.pMap->park_button_map[i].map[1], prime.pMap->park_button_map[i].map[0]);
+
+        if (IntersectionOf(left_trace, left_entrance_line) == GM_Intersection
+            && IntersectionOfLine(lp1, left_entrance_line) == RELATION_RIGHT) {
+            return i;
+        }
+    }
+    return -1;
+}
+
 // 杞﹁疆鏄惁鍘嬮亾璺竟绾�
-static bool CrashRedLine1(const Polygon *map, const car_model *car)
+static bool CrashRedLine1(const Polygon *map, const car_model_t *car)
 {
     bool ret = false;
 
@@ -360,7 +398,7 @@
 }
 
 // 杞﹁韩鏄惁鍘嬪簱浣嶇嚎
-static bool CrashRedLine2(const Polygon *map, const car_model *car)
+static bool CrashRedLine2(const Polygon *map, const car_model_t *car)
 {
     bool ret = false;
 
@@ -387,7 +425,7 @@
     return ret;
 }
 
-static bool CrashRedLine3(const Polygon *map, const car_model *car) {
+static bool CrashRedLine3(const Polygon *map, const car_model_t *car) {
     bool ret = false;
 
     if (!occurMoveBack) {
@@ -408,62 +446,6 @@
 
         free(car_body.point);
     }
-
-    return ret;
-}
-
-static bool EnterParking(const Polygon *map, const car_model *car) {
-    DEBUG("妫�鏌ュ仠杞﹀埌浣�...");
-
-    bool succ = false;
-
-    Polygon parking;
-    Polygon car_body;
-
-    car_body.num = car->bodyNum;
-    car_body.point = (PointF *) malloc(sizeof(PointF) * car_body.num);
-    for (int i = 0; i < car_body.num; ++i) {
-        car_body.point[i] = car->carXY[car->body[i]];
-    }
-
-    MakePolygon(&parking, {map->point[2], map->point[3], map->point[4], map->point[5]});
-
-    if (IntersectionOf(&car_body, &parking) == GM_Containment) {
-        succ = true;
-    }
-
-    CleanPolygon(&parking);
-    free(car_body.point);
-
-    return succ;
-}
-
-// 杞﹀ご瑕侀┒杩囧墠搴撲綅绾�
-static bool ExitParkArea(const Polygon *map, const car_model *car)
-{
-    if (IntersectionOfLine(map->point[6], map->point[7], car->carXY[ car->axial[AXIAL_FRONT] ]) == -1)
-            return true;
-    return false;
-}
-
-static bool ExitParkArea2(const Polygon *map, const car_model *car)
-{
-// 鍏ㄨ溅閮介渶涓嶅湪鍦板浘涓�
-    bool ret = false;
-
-    Polygon carBody;
-
-    carBody.num = car->bodyNum;
-    carBody.point = (PointF *)malloc(carBody.num * sizeof(PointF));
-    for (int i = 0; i < carBody.num; ++i) {
-        carBody.point[i] = car->carXY[car->body[i]];
-    }
-
-    if (IntersectionOf(&carBody, map) == GM_None) {
-        ret = true;
-    }
-
-    free(carBody.point);
 
     return ret;
 }

--
Gitblit v1.8.0