| | |
| | | private static List<Obstacle> parseObstacles(String obsStr, double margin) { |
| | | List<Obstacle> list = new ArrayList<>(); |
| | | if (obsStr == null || obsStr.isEmpty()) return list; |
| | | for (String part : obsStr.split("\\$")) { |
| | | |
| | | // 兼容两种格式: |
| | | // 1. 括号分隔:(x1,y1;x2,y2)(x3,y3;x4,y4) |
| | | // 2. $分隔:x1,y1;x2,y2$x3,y3;x4,y4 |
| | | |
| | | String[] groups; |
| | | if (obsStr.contains("(") && obsStr.contains(")")) { |
| | | // 处理括号格式 |
| | | // 移除所有空白字符 |
| | | String cleanStr = obsStr.replaceAll("\\s+", ""); |
| | | // 提取括号内的内容 |
| | | List<String> parts = new ArrayList<>(); |
| | | java.util.regex.Matcher m = java.util.regex.Pattern.compile("\\(([^)]+)\\)").matcher(cleanStr); |
| | | while (m.find()) { |
| | | parts.add(m.group(1)); |
| | | } |
| | | groups = parts.toArray(new String[0]); |
| | | } else { |
| | | // 处理$分隔格式 |
| | | groups = obsStr.split("\\$"); |
| | | } |
| | | |
| | | for (String part : groups) { |
| | | if (part == null || part.trim().isEmpty()) continue; |
| | | List<Point> pts = parseCoords(part); |
| | | if (pts.size() == 2) { |
| | | double r = dist(pts.get(0), pts.get(1)); |