From 148a951e0d44577997fd2790f889dcdd7dbd6889 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期五, 17 四月 2020 17:53:18 +0800
Subject: [PATCH] 坐标
---
lib/src/main/cpp/test_items2/road_exam.cpp | 150 +++++++++++++++++++++++++++++++------------------
1 files changed, 95 insertions(+), 55 deletions(-)
diff --git a/lib/src/main/cpp/test_items2/road_exam.cpp b/lib/src/main/cpp/test_items2/road_exam.cpp
index ee1456b..de97518 100644
--- a/lib/src/main/cpp/test_items2/road_exam.cpp
+++ b/lib/src/main/cpp/test_items2/road_exam.cpp
@@ -983,9 +983,30 @@
}
return -1;
}
-#if 0
+
+#if 1
+
+typedef struct {
+ int road;
+ int segment;
+ int track;
+} CarOnTrackInfo_t;
+
+static CarOnTrackInfo_t CarOnTrackInfo;
+
void TestRoadGeneral(struct road_exam2_map &map, const car_model *car, LIST_CAR_MODEL &CarModelList, double speed, int moveDirect, const struct RtkTime *rtkTime)
{
+ // 妫�娴嬭溅閬撳彉鏇�
+ CarOnTrackInfo_t newCarOnTrackInfo;
+
+ if (newCarOnTrackInfo.road == CarOnTrackInfo.road &&
+ newCarOnTrackInfo.segment == CarOnTrackInfo.segment &&
+ newCarOnTrackInfo.track != CarOnTrackInfo.track) {
+
+ }
+
+ CarOnTrackInfo = newCarOnTrackInfo;
+
}
@@ -1075,19 +1096,6 @@
if (currIndex == INVALID_ROAD || currIndex >= map.roads.size())
return ret;
- Polygon roadArea;
-
- roadArea.num = map.roads[currIndex].leftEdge.size() + map.roads[currIndex].rightEdge.size();;
- roadArea.point = (PointF *) malloc(roadArea.num * sizeof(PointF));;
-
- int n = 0;
- for (int j = 0; j < map.roads[currIndex].leftEdge.size(); j++) {
- roadArea.point[n++] = map.roads[i].leftEdge[j];
- }
- for (int j = map.roads[currIndex].rightEdge.size(); j > 0; j--) {
- roadArea.point[n++] = map.roads[i].rightEdge[j - 1];
- }
-
Polygon carBody;
carBody.num = car->bodyNum;
@@ -1096,12 +1104,11 @@
carBody.point[i] = car->carXY[car->body[i]];
}
- if (IntersectionOf(&carBody, &roadArea) == GM_None) {
+ if (IntersectionOf(&carBody, &map.roads[currIndex].area) == GM_None) {
ret = true;
}
free(carBody.point);
- free(roadArea.point);
return ret;
}
@@ -1134,61 +1141,94 @@
return false;
}
-struct {
- int road;
- int segment;
- int track;
-} CarOnTrackInfo;
static void DetectSeparate(int currIndex, struct road_exam2_map &map, const car_model *car)
{
int segment;
int track = -1;
+ CarOnTrackInfo_t newInfo;
+
if (currIndex == INVALID_ROAD || currIndex >= map.roads.size())
return;
+ // 閬嶅巻姣忎竴鍒嗘
for (int i = 0; i < map.roads[currIndex].separate.size(); i++) {
- if (map.roads[currIndex].separate[i].character == 0) {
- int separate_line_num = map.roads[currIndex].separate[i].line.size();
+ int separate_line_num = map.roads[currIndex].separate[i].lines.size();
- // 閬嶅巻褰撳墠鍒嗘鐨勬瘡涓�鏉$嚎
- for (int j = 0; j < separate_line_num; ++j) {
- Line theLine;
- int p1 = 0;
- bool match_line = false;
- // 鍗曠嫭鐨勪竴鏉¤櫄绾�
- for (int p2 = 1; p2 < map.roads[currIndex].separate[i].line[j].num; ++p2) {
- MakeLine(&theLine, &map.roads[currIndex].separate[i].line[j].point[p1], &map.roads[currIndex].separate[i].line[j].point[p2]);
- if (p1 == 0 || p2 == map.roads[currIndex].separate[i].line[j].num - 1) {
- // 棣栧熬涓ょ锛屽簲閲囩敤寤堕暱绾跨殑鏂瑰紡
+ struct vrecord_ {
+ int valid;
+ int p1;
+ int p2;
+ };
+
+ vector<struct vrecord_> vrecord;
+ vrecord.clear();
+
+ bool match1 = false;
+ // 閬嶅巻褰撳墠鍒嗘鐨勬瘡涓�鏉$嚎
+ for (int j = 0; j < separate_line_num; ++j) {
+ Line theLine;
+ int p1 = 0;
+
+ struct vrecord_ v;
+ v.valid = 0;
+
+ // 鍗曠嫭鐨勪竴鏉¤櫄绾�
+ for (int p2 = 1; p2 < map.roads[currIndex].separate[i].lines[j].num; ++p2) {
+ MakeLine(&theLine, &map.roads[currIndex].separate[i].lines[j].point[p1],
+ &map.roads[currIndex].separate[i].lines[j].point[p2]);
+ if (VerticalPointOnLine(car->basePoint, theLine)) {
+ v.valid = 1;
+ v.p1 = p1;
+ v.p2 = p2;
+ match1 = true;
+ break;
+ }
+ p1 = p2;
+ }
+
+ vrecord.push_back(v);
+
+ track = separate_line_num;//
+ }
+
+
+
+ if (match1) {
+ for (int x = 0; x < vrecord.size(); ++x) {
+ if (vrecord[i].valid == 0) {
+ // 棣栧熬涓ゆ绾跨殑寤剁敵蹇呮湁涓�涓瀭鐐�
+ if (DistanceOf(car->carXY[ car->axial[AXIAL_FRONT] ], map.roads[currIndex].separate[i].lines[x].point[0]) <
+ DistanceOf(car->carXY[ car->axial[AXIAL_FRONT] ], map.roads[currIndex].separate[i].lines[x].point[1])) {
+ vrecord[x].p1 = 0;
+ vrecord[x].p2 = 1;
+ } else {
+ vrecord[x].p1 = map.roads[currIndex].separate[i].lines[x].num - 2;
+ vrecord[x].p2 = map.roads[currIndex].separate[i].lines[x].num - 1;
}
- if (VerticalPointOnLine(car->basePoint, theLine)) {
- match_line = true;
- int rel = IntersectionOfLine(map.roads[currIndex].separate[i].line[j].point[p1],
- map.roads[currIndex].separate[i].line[j].point[p2],
- car->basePoint);
- // 璁板綍鎵�鍦ㄩ亾璺紝鍒嗛亾娈碉紝鍒嗛亾鎯呭喌
- if (rel == 1) { // 鍦ㄥ乏渚�
- segment = i;
- track = j;
- goto DETECT_SEPARATE_END;
- } else if (rel != -1) { // 鍦ㄧ嚎涓�
- segment = i;
- track = j;
- goto DETECT_SEPARATE_END;
- }
- break;
- }
- p1 = p2;
}
- track = separate_line_num;
+ int rel = IntersectionOfLine(map.roads[currIndex].separate[i].lines[x].point[vrecord[x].p1],
+ map.roads[currIndex].separate[i].lines[x].point[vrecord[x].p2],
+ car->basePoint);
+ if (rel != -1) {
+ newInfo.road = currIndex;
+ newInfo.segment = i;
+ newInfo.track = x;
+ break;
+ }
}
+
+ newInfo.road = currIndex;
+ newInfo.segment = i;
+ newInfo.track = vrecord.size();
+
+ break;
}
}
-
- DETECT_SEPARATE_END:
- ;
}
+
+
+
#endif
--
Gitblit v1.8.0