From 28d9ed7bc5749bf0b20b537344573b79e142ff59 Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期四, 24 十月 2024 16:09:12 +0800 Subject: [PATCH] # --- zy-acs-manager/src/main/java/com/zy/acs/manager/core/DispatcherTestController.java | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 50 insertions(+), 8 deletions(-) diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/DispatcherTestController.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/DispatcherTestController.java index cef313a..708d4fb 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/DispatcherTestController.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/DispatcherTestController.java @@ -49,21 +49,55 @@ Set<String> visited = new HashSet<>(); + // 閬嶅巻鎵�鏈夎妭鐐癸紝瀵绘壘搴︽暟涓嶇瓑浜�2鐨勮妭鐐逛綔涓鸿捣鐐� for (String codeData : codeDataList) { - if (adjacencyCodeMap.get(codeData).size() != 2) { - if (!visited.contains(codeData)) { - Lane lane = new Lane(String.valueOf(snowflakeIdWorker.nextId()).substring(3)); - dfsCalc(codeData, null, lane, visited, adjacencyCodeMap); - lanes.add(lane); + if (adjacencyCodeMap.getOrDefault(codeData, Collections.emptyList()).size() != 2) { + List<String> neighbors = adjacencyCodeMap.getOrDefault(codeData, Collections.emptyList()); + for (String neighbor : neighbors) { + // 浠呴亶鍘嗗害鏁颁负2涓旀湭琚闂殑閭诲眳 + if (adjacencyCodeMap.getOrDefault(neighbor, Collections.emptyList()).size() == 2 && !visited.contains(neighbor)) { + Lane lane = new Lane(String.valueOf(snowflakeIdWorker.nextId()).substring(3)); + dfsCalc(neighbor, codeData, lane, visited, adjacencyCodeMap); + lanes.add(lane); + } } } } + + // 澶勭悊搴︽暟涓�2涓旇繛鎺ヤ袱涓嫄寮偣鐨勮妭鐐癸紙鐙珛宸烽亾锛� + for (String codeData : codeDataList) { + if (adjacencyCodeMap.getOrDefault(codeData, Collections.emptyList()).size() == 2 && !visited.contains(codeData)) { + List<String> neighbors = adjacencyCodeMap.getOrDefault(codeData, Collections.emptyList()); + boolean connectedToTwoTurningPoints = true; + for (String neighbor : neighbors) { + if (adjacencyCodeMap.getOrDefault(neighbor, Collections.emptyList()).size() == 2) { + connectedToTwoTurningPoints = false; + break; + } + } + if (connectedToTwoTurningPoints) { + Lane lane = new Lane(String.valueOf(snowflakeIdWorker.nextId()).substring(3)); + lane.getCodes().add(codeData); + lanes.add(lane); + visited.add(codeData); + } + } + } + + System.out.println(GsonUtils.toJson(lanes)); return R.ok().add(lanes); } private void dfsCalc(String code, String parent, Lane lane, Set<String> visited, Map<String, List<String>> adjacencyCodeMap) { + // 妫�鏌ュ綋鍓嶈妭鐐圭殑搴︽暟鏄惁涓�2 + if (adjacencyCodeMap.getOrDefault(code, Collections.emptyList()).size() != 2) { + // 涓嶅寘鍚嫄寮偣 + return; + } + + // 鏍囪涓哄凡璁块棶骞跺姞鍏ュ贩閬� visited.add(code); lane.getCodes().add(code); @@ -73,11 +107,15 @@ } for (String neighbor : neighbors) { - if (parent != null && neighbor.equals(parent)) { + if (neighbor.equals(parent)) { continue; } - if (!visited.contains(neighbor) && isSameDirection(code, neighbor, parent)) { - dfsCalc(neighbor, code, lane, visited, adjacencyCodeMap); + + if (adjacencyCodeMap.getOrDefault(neighbor, Collections.emptyList()).size() == 2 && !visited.contains(neighbor)) { + // 妫�鏌ユ柟鍚戞槸鍚︿竴鑷� + if (isSameDirection(code, neighbor, parent)) { + dfsCalc(neighbor, code, lane, visited, adjacencyCodeMap); + } } } } @@ -86,6 +124,7 @@ if (parent == null) { return true; } + Code parentCode = codeService.selectByData(parent); Code currentCode = codeService.selectByData(code); Code neighborCode = codeService.selectByData(neighbor); @@ -94,8 +133,10 @@ double direction2 = calculateDirection(currentCode, neighborCode); double angleDifference = Math.abs(direction1 - direction2); + // 瑙勮寖鍖栬搴﹀樊 angleDifference = Math.min(angleDifference, 2 * Math.PI - angleDifference); + // 璁剧疆瑙掑害宸槇鍊间负3搴� return angleDifference < Math.toRadians(3); } @@ -105,4 +146,5 @@ return Math.atan2(deltaY, deltaX); } + } -- Gitblit v1.9.1