From 0803b041d32a284ee8585914618219ecae82b21f Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期五, 26 十二月 2025 15:25:27 +0800
Subject: [PATCH] 增加了异形有障碍物路径算法
---
src/lujing/MowingPathGenerationPage.java | 39 +++++++++++++++++++++++++++++++++++++--
1 files changed, 37 insertions(+), 2 deletions(-)
diff --git a/src/lujing/MowingPathGenerationPage.java b/src/lujing/MowingPathGenerationPage.java
index 8bd2ba9..77c496c 100644
--- a/src/lujing/MowingPathGenerationPage.java
+++ b/src/lujing/MowingPathGenerationPage.java
@@ -627,8 +627,9 @@
} else if (grassType == 2) {
// 寮傚舰鍦板潡锛屾湁闅滅鐗� -> 璋冪敤 YixinglujingHaveObstacel
// 浼犲叆鍙傛暟锛歜oundary(A), obstacles(B), plannerWidth(C), safetyMarginStr(D)
- // 娉ㄦ剰锛歒ixinglujingHaveObstacel.planPath 杩斿洖 String
- generated = YixinglujingHaveObstacel.planPath(boundary, obstacles, plannerWidth, safetyMarginStr);
+ List<YixinglujingHaveObstacel.PathSegment> segments =
+ YixinglujingHaveObstacel.planPath(boundary, obstacles, plannerWidth, safetyMarginStr);
+ generated = formatYixingHaveObstaclePathSegments(segments);
} else {
// 鏃犳硶鍒ゆ柇鍦板潡绫诲瀷锛岄粯璁ゆ寜鍑稿舰澶勭悊鎴栨彁绀�
if (showMessages) {
@@ -781,6 +782,40 @@
}
/**
+ * 鏍煎紡鍖� YixinglujingHaveObstacel.PathSegment 鍒楄〃涓哄潗鏍囧瓧绗︿覆
+ */
+ private String formatYixingHaveObstaclePathSegments(List<YixinglujingHaveObstacel.PathSegment> segments) {
+ if (segments == null || segments.isEmpty()) {
+ return "";
+ }
+ StringBuilder sb = new StringBuilder();
+ YixinglujingHaveObstacel.Point last = null;
+ for (YixinglujingHaveObstacel.PathSegment segment : segments) {
+ // 濡傛灉鏄涓�娈碉紝鎴栬�呭綋鍓嶆璧风偣涓庝笂涓�娈电粓鐐逛笉杩炵画锛屽垯娣诲姞璧风偣
+ if (last == null || !equalsYixingHaveObstaclePoint(last, segment.start)) {
+ appendYixingHaveObstaclePoint(sb, segment.start);
+ }
+ // 娣诲姞缁堢偣
+ appendYixingHaveObstaclePoint(sb, segment.end);
+ last = segment.end;
+ }
+ return sb.toString();
+ }
+
+ private boolean equalsYixingHaveObstaclePoint(YixinglujingHaveObstacel.Point p1, YixinglujingHaveObstacel.Point p2) {
+ if (p1 == null || p2 == null) return false;
+ double tolerance = 1e-6;
+ return Math.abs(p1.x - p2.x) < tolerance && Math.abs(p1.y - p2.y) < tolerance;
+ }
+
+ private void appendYixingHaveObstaclePoint(StringBuilder sb, YixinglujingHaveObstacel.Point point) {
+ if (sb.length() > 0) {
+ sb.append(";");
+ }
+ sb.append(String.format(Locale.US, "%.6f,%.6f", point.x, point.y));
+ }
+
+ /**
* 姣旇緝涓や釜鐐规槸鍚︾浉鍚岋紙浣跨敤灏忕殑瀹瑰樊锛�
*/
private boolean equals2D(AoxinglujingNoObstacle.Point p1, AoxinglujingNoObstacle.Point p2) {
--
Gitblit v1.10.0