| | |
| | | |
| | | for (int i = 0; i < outerCircle; i++) { |
| | | int idx = i + 1; |
| | | List<NavigateNode> list = extend_nodes(map, currentNode, idx); |
| | | List<NavigateNode> list = extend_outer_nodes(map, currentNode, idx); |
| | | if (list.isEmpty()) { |
| | | continue; |
| | | } |
| | |
| | | |
| | | for (int i = 0; i < innerCircle; i++) { |
| | | int idx = i + 1; |
| | | List<NavigateNode> list = extend_nodes(map, currentNode, idx); |
| | | List<NavigateNode> list = extend_inner_nodes(map, currentNode, idx); |
| | | if (list.isEmpty()) { |
| | | continue; |
| | | } |
| | |
| | | return innerNodes; |
| | | } |
| | | |
| | | private List<NavigateNode> extend_nodes(int[][] map, NavigateNode startNode, int innerCircleIdx) { |
| | | private List<NavigateNode> extend_inner_nodes(int[][] map, NavigateNode startNode, int innerCircleIdx) { |
| | | //默认地图母轨方向x |
| | | String mapDirection = "x"; |
| | | ConfigService configService = SpringUtils.getBean(ConfigService.class); |
| | |
| | | return nodes; |
| | | } |
| | | |
| | | private List<NavigateNode> extend_outer_nodes(int[][] map, NavigateNode startNode, int innerCircleIdx) { |
| | | ArrayList<NavigateNode> nodes = new ArrayList<>(); |
| | | int x = startNode.getX(); |
| | | int y = startNode.getY(); |
| | | int z = startNode.getZ(); |
| | | |
| | | if (is_valid(map, x + innerCircleIdx, y)) { |
| | | NavigateNode node = new NavigateNode(x + innerCircleIdx, y); |
| | | node.setNodeValue(map[x + innerCircleIdx][y]); |
| | | node.setZ(z); |
| | | if (node.getNodeValue().equals(startNode.getNodeValue())) { |
| | | nodes.add(node); |
| | | } |
| | | } |
| | | |
| | | if (is_valid(map, x - innerCircleIdx, y)) { |
| | | NavigateNode node = new NavigateNode(x - innerCircleIdx, y); |
| | | node.setNodeValue(map[x - innerCircleIdx][y]); |
| | | node.setZ(z); |
| | | if (node.getNodeValue().equals(startNode.getNodeValue())) { |
| | | nodes.add(node); |
| | | } |
| | | } |
| | | |
| | | if (is_valid(map, x, y + innerCircleIdx)) { |
| | | NavigateNode node = new NavigateNode(x, y + innerCircleIdx); |
| | | node.setNodeValue(map[x][y + innerCircleIdx]); |
| | | node.setZ(z); |
| | | if (node.getNodeValue().equals(startNode.getNodeValue())) { |
| | | nodes.add(node); |
| | | } |
| | | } |
| | | |
| | | if (is_valid(map, x, y - innerCircleIdx)) { |
| | | NavigateNode node = new NavigateNode(x, y - innerCircleIdx); |
| | | node.setNodeValue(map[x][y - innerCircleIdx]); |
| | | node.setZ(z); |
| | | if (node.getNodeValue().equals(startNode.getNodeValue())) { |
| | | nodes.add(node); |
| | | } |
| | | } |
| | | return nodes; |
| | | } |
| | | |
| | | private boolean is_valid(int[][] map, int x, int y) { |
| | | if (x < 0 || x >= map.length |
| | | || y < 0 || y >= map[0].length) { |