From a073dc3c983b4c56c5da92642c9ad11995bdb844 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期一, 11 五月 2020 18:05:31 +0800
Subject: [PATCH] 新的科目三
---
lib/src/main/cpp/test_items2/through_something.cpp | 75 +++++++++++++++++++++++++++++--------
1 files changed, 59 insertions(+), 16 deletions(-)
diff --git a/lib/src/main/cpp/test_items2/through_something.cpp b/lib/src/main/cpp/test_items2/through_something.cpp
index 9461842..d9349e9 100644
--- a/lib/src/main/cpp/test_items2/through_something.cpp
+++ b/lib/src/main/cpp/test_items2/through_something.cpp
@@ -2,6 +2,9 @@
// Created by YY on 2020/3/20.
//
+#include <map>
+#include <algorithm>
+
#include "through_something.h"
#include "../driver_test.h"
#include "../test_common/Geometry.h"
@@ -12,12 +15,17 @@
#define DEBUG(fmt, args...) LOGD("<through_something> <%s>: " fmt, __func__, ##args)
+using namespace std;
+
static const double LASTEST_BREAK_POINT = 30.0;
static const double DISTANCE_STOP_CAR_TO_STOP_LINE = 5.0;
+static const double PASS_SCHOOL_MAX_SPEED = 30.0; // kmh
static int breakActive;
static int stopActive;
static bool crashRedLine;
+
+static map<int, bool> breakRecord; // 璁板綍杞﹁締椹惰繃鍚勪釜鍋滄绾垮墠鍒硅溅鍔ㄤ綔
void StartThroughExam(int index, LIST_ROAD_MAP &RoadMapList)
{
@@ -33,6 +41,20 @@
breakActive = 0;
stopActive = 0;
crashRedLine = false;
+}
+
+void InitThroughSomething(road_exam_map &RoadMap)
+{
+ breakRecord.clear();
+ // 涓烘瘡涓�涓埞杞︽娴嬬偣
+ for (int i = 0; i < RoadMap.specialAreas.size(); ++i) {
+ if (RoadMap.specialAreas[i].type == ZEBRA_CROSSING || RoadMap.specialAreas[i].type == BUS_STATION_AREA) {
+ breakRecord.insert(pair<int, bool>(RoadMap.specialAreas[i].id, false));
+ }
+ }
+ for (int i = 0; i < RoadMap.roads.size(); ++i) {
+ breakRecord.insert(pair<int, bool>(RoadMap.roads[i].id, false));
+ }
}
int ExecuteThroughExam(int index, LIST_ROAD_MAP &RoadMapList, const car_model *car,
@@ -133,36 +155,57 @@
return index;
}
-static void ThroughZebraCrossing(struct road_exam2_map &map, const car_model *car)
+void CheckBreakActive(road_exam_map &map, const car_model *car, LIST_CAR_MODEL &CarModelList)
{
- for (int i = 0; i < map.specialAreas.size(); i++) {
- if (map.specialAreas[i].character == 'zebra') {
- double distance = 0.0;
+ int BreakDone = ReadCarStatus(BREAK);
+ for (int i = 0; i < map.specialAreas.size(); i++) {
+ if (map.specialAreas[i].type == ZEBRA_CROSSING || map.specialAreas[i].type == BUS_STATION_AREA) {
double yaw = YawOf(car->carXY[ car->axial[AXIAL_FRONT] ], car->carXY[ car->axial[AXIAL_REAR] ]);
PointF extPoint = PointExtend(car->carXY[ car->axial[AXIAL_FRONT] ], LASTEST_BREAK_POINT, yaw);
Line extLine;
MakeLine(&extLine, &car->carXY[ car->axial[AXIAL_FRONT] ], &extPoint);
- if (IntersectionOf(extLine, map.specialAreas[i].startLine) == GM_Intersection &&
- IntersectionOfLine(car->carXY[ car->axial[AXIAL_FRONT] ], map.specialAreas[i].startLine) == 1 ) {
- jj = true;
- if (ReadCarStatus(BREAK) == BREAK_ACTIVE) {
- breakActive = 1;
- }
- } else {
- jj = false;
+ // 璁$畻鐐瑰埌宸︿晶璺竟绾跨殑鍨傜偣
+ int road = 0;
+ for (road = 0; road < map.roads.size(); ++road) {
+ if (map.roads[road].id == map.specialAreas[i].road)
+ break;
}
+ PointF vPoint = GetSELine(map.roads[road].leftEdge, map.specialAreas[i].area[0]);
+ Line startLine;
+ DEBUG("璁$畻鍨傜偣 (%f, %f)", vPoint.X, vPoint.Y);
+ MakeLine(&startLine, &map.specialAreas[i].area[0], &vPoint);
-
- if (distance < LASTEST_BREAK_POINT) {
- if (ReadCarStatus(BREAK) == BREAK_ACTIVE) {
- breakActive = 1;
+ // 杞﹀ご鍜屾枒椹嚎璺濈涓嶈冻30绫�
+ if (IntersectionOf(extLine, startLine) == GM_Intersection &&
+ IntersectionOfLine(car->carXY[ car->axial[AXIAL_FRONT] ], startLine) == 1 ) {
+ DEBUG("杩涘叆鍑忛�熷尯");
+ if (BreakDone == BREAK_ACTIVE) {
+ auto itx = breakRecord.find(map.specialAreas[i].id);
+ if (itx != breakRecord.end()) {
+ itx->second = true;
+ }
}
}
+
+ // 璺ㄧ嚎鍚庯紝妫�鏌ュ埞杞﹀姩浣�
+ if (CrashTheLine(startLine, car, CarModelList)) {
+ auto itx = breakRecord.find(map.specialAreas[i].id);
+ if (itx != breakRecord.end()) {
+ if (itx->second == false) {
+ // 涓嶆寜瑙勫畾鍑忛�燂紝涓嶅悎鏍�
+ DEBUG("涓嶆寜瑙勫畾鍑忛��");
+ }
+ itx->second = false;
+ }
+ }
+ } else if (map.specialAreas[i].type == SCHOOL_AREA) {
+
}
}
}
+
--
Gitblit v1.8.0