From 32524195d474b74e48916867b2a6c2f022a40d98 Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期二, 09 十二月 2025 19:36:32 +0800
Subject: [PATCH] 20251209
---
src/lujing/Lunjingguihua.java | 37 +++++++++++++++++++++++++++++++++++--
1 files changed, 35 insertions(+), 2 deletions(-)
diff --git a/src/lujing/Lunjingguihua.java b/src/lujing/Lunjingguihua.java
index 3b1c99b..907a4f7 100644
--- a/src/lujing/Lunjingguihua.java
+++ b/src/lujing/Lunjingguihua.java
@@ -266,8 +266,8 @@
}
List<PathSegment> generate() {
- if (!"spiral".equals(mode)) {
- return generateParallelPath();
+ if ("spiral".equals(mode)) {
+ return generateSpiralPath();
}
return generateParallelPath();
}
@@ -361,6 +361,39 @@
return path;
}
+ private List<PathSegment> generateSpiralPath() {
+ Geometry safeArea = buildSafeArea();
+ if (safeArea == null || safeArea.isEmpty()) {
+ System.err.println("瀹夊叏鍖哄煙涓虹┖锛屾棤娉曠敓鎴愯灪鏃嬭矾寰�");
+ return new ArrayList<>();
+ }
+
+ List<PathSegment> spiral = luoxuan.generateSpiralPath(safeArea, width);
+ if (spiral.isEmpty()) {
+ return spiral;
+ }
+
+ postProcess(spiral);
+ PathSegment firstMowing = null;
+ PathSegment endCandidate = null;
+ for (int i = 0; i < spiral.size(); i++) {
+ PathSegment seg = spiral.get(i);
+ if (seg != null && seg.isMowing) {
+ if (firstMowing == null) {
+ firstMowing = seg;
+ }
+ endCandidate = seg;
+ }
+ }
+ if (firstMowing != null) {
+ firstMowing.setAsStartPoint();
+ }
+ if (endCandidate != null && endCandidate != firstMowing) {
+ endCandidate.setAsEndPoint();
+ }
+ return spiral;
+ }
+
private Geometry buildSafeArea() {
try {
Coordinate[] coords = polygon.toArray(new Coordinate[0]);
--
Gitblit v1.10.0