From 7b6dd5603277ac8fddba735c456f99d4c07e2e9b Mon Sep 17 00:00:00 2001
From: fctom1215 <fctom1215@outlook.com>
Date: 星期三, 12 二月 2020 17:43:36 +0800
Subject: [PATCH] 修改了上坡起步。

---
 lib/src/main/cpp/test_items/park_edge.cpp |   36 +++++++++++++++++++++++++++++-------
 1 files changed, 29 insertions(+), 7 deletions(-)

diff --git a/lib/src/main/cpp/test_items/park_edge.cpp b/lib/src/main/cpp/test_items/park_edge.cpp
index 87993ff..105bd16 100644
--- a/lib/src/main/cpp/test_items/park_edge.cpp
+++ b/lib/src/main/cpp/test_items/park_edge.cpp
@@ -20,6 +20,7 @@
 const int PARK_TIMEOUT = 90;
 const uint32_t STOP_CAR_TIME = D_SEC(2);
 
+static bool reportExamTimeout;
 static uint64_t stopTimepoint = 0;
 static bool occurCrashRedLine1, occurCrashRedLine2;
 static int prevMoveStatus, storeMoveStatusBeforeStop;
@@ -31,10 +32,12 @@
 static bool CrashRedLine2(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);
 
 void StartParkEdge(int moveStatus, const struct RtkTime *rtkTime)
 {
     occurCrashRedLine1 = occurCrashRedLine2 = false;        // 杩欎釜绉戠洰瑙勫畾鐗规畩鐐癸紝鍙戠敓涓�娆℃墸10鍒嗭紝鑰屼笉鐩存帴娣樻卑
+    reportExamTimeout = false;
 
     prevMoveStatus = moveStatus;
     parkSuccess = false;
@@ -74,25 +77,23 @@
         occurCrashRedLine2 = false;
     }
 
-    if (ExitParkArea(map, car)) {
+    if (ExitParkArea(map, car) || ExitParkArea2(map, car)) {
         if (!parkSuccess || !occurMoveBack) {
             // 鐩存帴椹剁娴嬭瘯鍖猴紝璁や负绉诲簱涓嶅叆
             AddExamFault(21, rtkTime);
             DEBUG("鐩存帴椹剁娴嬭瘯鍖�,绉诲簱涓嶅叆");
-            status = -1;
-        } else {
-            status = 1;
         }
+        status = 1;
     }
 
     if (occurMoveBack) {
         uint32_t tp = TimeMakeComposite(2000 + rtkTime->YY, rtkTime->MM, rtkTime->DD, rtkTime->hh, rtkTime->mm, rtkTime->ss);
 
-        if (tp - moveBackTimePoint >= PARK_TIMEOUT) {
+        if (!reportExamTimeout && tp - moveBackTimePoint >= PARK_TIMEOUT) {
             // 瓒呮椂90绉掞紝涓嶅悎鏍�
             AddExamFault(22, rtkTime);
+            reportExamTimeout = true;
             DEBUG("绉诲簱90绉掕秴鏃�");
-            status = -1;
         }
     }
 
@@ -129,7 +130,6 @@
                         // 鍋滄鍚庯紝杞﹁韩鍑虹嚎锛屼笉鍚堟牸
                         AddExamFault(21, rtkTime);
                         DEBUG("绉诲簱涓嶅叆");
-                        status = -1;
                     }
 
                     // 鍦ㄨ繖閲屾鏌ヨ浆鍚戠伅鐘舵��
@@ -254,3 +254,25 @@
     }
     return true;
 }
+
+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