From 8dc3bcb40363cc6f9281092b4f6ea0ebcb9335b0 Mon Sep 17 00:00:00 2001 From: tzsk <Administrator@qq.com> Date: 星期三, 07 二月 2024 11:27:36 +0800 Subject: [PATCH] # --- src/main/java/com/zy/common/utils/NavigateUtils.java | 67 ++++++++++++++++++++++++++++++--- 1 files changed, 60 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java index eb2b668..689e571 100644 --- a/src/main/java/com/zy/common/utils/NavigateUtils.java +++ b/src/main/java/com/zy/common/utils/NavigateUtils.java @@ -4,7 +4,11 @@ import com.zy.common.model.MapNode; import com.zy.common.model.NavigateNode; import com.zy.common.model.enums.NavigationMapType; +import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.ShuttleTaskModeType; +import com.zy.core.enums.SlaveType; +import com.zy.core.model.protocol.NyShuttleProtocol; +import com.zy.core.thread.NyShuttleThread; import java.util.*; @@ -13,13 +17,16 @@ */ public class NavigateUtils { - public static List<NavigateNode> calc(String startPoint, String endPoint, Integer mapType, List<int[]> shuttlePoints) { + public static List<NavigateNode> calc(String startPoint, String endPoint, Integer mapType, List<int[]> shuttlePoints, List<int[]> whites) { //閫氳繃寮�濮嬬紪鍙峰拰缁撴潫缂栧彿鑾峰彇瀵瑰簲鐨剎y杞村潗鏍� int[] startArr = NavigatePositionConvert.positionToXY(startPoint);//寮�濮嬭妭鐐� int[] endArr = NavigatePositionConvert.positionToXY(endPoint);//缁撴潫鑺傜偣 ArrayList<int[]> whiteList = new ArrayList<>();//璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟 whiteList.add(startArr);//灏嗗紑濮嬭妭鐐硅缃负鐧藉悕鍗曪紝浠ラ槻琚繃婊� + if (whites != null && !whites.isEmpty()) { + whiteList.addAll(whites);//鎵归噺娣诲姞鐧藉悕鍗曡妭鐐� + } //鑾峰彇褰撳墠鑺傜偣璁$畻鐨勫眰楂橈紝骞惰祴鍊煎埌姣忎竴涓妭鐐逛腑 int lev = Utils.getLev(startPoint); @@ -35,7 +42,7 @@ NavigateNode res_node = solution.astarSearch(start, end); if (res_node == null) { - System.out.println("鏈壘鍒拌矾寰�"); + System.out.println(start + "," + end + "锛氭湭鎵惧埌璺緞"); return null; } else { ArrayList<NavigateNode> list = new ArrayList<>(); @@ -222,15 +229,61 @@ /** * 鑾峰彇涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� */ - public static Integer getMiddleToDistDistance(List<NavigateNode> path, Integer distance) { - //涓棿璺緞 - NavigateNode middlePath = path.get(path.size() - distance); - return middlePath.getMoveDistance(); + public static Integer getMiddleToDistDistance(List<NavigateNode> path, NavigateNode middlePath) { + //鏈�鍚庝竴鏉¤妭鐐逛笉璁$畻杩涜璧拌窛绂� + NavigateNode lastPath = path.get(path.size() - 1); + //鎬昏窛绂� + int allDistance = 0; + boolean flag = false; + for (NavigateNode navigateNode : path) { + if (!flag && navigateNode.equals(middlePath)) { + flag = true; + } + + if (navigateNode.equals(lastPath)) { + continue;//鏈�鍚庝竴鏉¤妭鐐逛笉璁$畻杩涜璧拌窛绂� + } + + if (flag) { + allDistance += navigateNode.getMoveDistance(); + } + } + return allDistance; + } + + /** + * 妫�娴嬭矾寰勬槸鍚﹀彲鐢�(鍙蛋) + */ + public static boolean checkPathIsAvailable(List<NavigateNode> path, Integer shuttleNo, Integer lev, List<int[]> whitePoints) { + NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo); + if (shuttleThread == null) { + return false; + } + NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); + if (shuttleProtocol == null) { + return false; + } + + Integer mapType = NavigationMapType.DFX.id; + if (shuttleProtocol.getLiftPosition() == 1) { + //涓嬮檷浣嶇疆 + mapType = NavigationMapType.NORMAL.id; + } + + NavigateSolution solution = new NavigateSolution(mapType, lev, whitePoints, Utils.getShuttlePoints(shuttleNo, lev));//鑾峰彇鏃犵櫧鍚嶅崟鍦板浘(璇ュ湴鍥惧寘鍚皬杞﹀潗鏍�) + int[][] map = solution.map; + for (NavigateNode node : path) { + int value = map[node.getX()][node.getY()]; + if (value != 0 && value != 3 && value != 5) {//姣嶈建閬�3銆佸瓙杞ㄩ亾0銆佸厖鐢垫々5 + return false; + } + } + return true; } public static void main(String[] args) { //璁$畻璺緞 - List<NavigateNode> calc = calc("1000901", "1800201", NavigationMapType.NONE.id, null); + List<NavigateNode> calc = calc("1000901", "1800201", NavigationMapType.NONE.id, null, null); System.out.println(calc); System.out.println("------------------------"); // List<NavigateNode> calc = calc("0501401", "0201801", "out"); -- Gitblit v1.9.1