From 0803b041d32a284ee8585914618219ecae82b21f Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期五, 26 十二月 2025 15:25:27 +0800
Subject: [PATCH] 增加了异形有障碍物路径算法

---
 src/gecaoji/Gecaoji.java |   34 +++++++++++++++++++++++++++++-----
 1 files changed, 29 insertions(+), 5 deletions(-)

diff --git a/src/gecaoji/Gecaoji.java b/src/gecaoji/Gecaoji.java
index e89222a..18493ec 100644
--- a/src/gecaoji/Gecaoji.java
+++ b/src/gecaoji/Gecaoji.java
@@ -49,6 +49,11 @@
     }
 
     public void refreshFromDevice() {
+        // 妫�鏌ユ槸鍚︽鍦ㄥ鑸瑙堟ā寮忥紝濡傛灉鏄垯涓嶆洿鏂颁綅缃�
+        if (isNavigating()) {
+            return;
+        }
+        
         Device device = Device.getGecaoji();
         if (device == null) {
             positionValid = false;
@@ -57,7 +62,7 @@
 
         double x = parseCoordinate(device.getRealtimeX());
         double y = parseCoordinate(device.getRealtimeY());
-        double heading = parseHeading(device.getHeading());
+        double heading = parseHeading(device.getYaw());
         if (Double.isNaN(x) || Double.isNaN(y)) {
             // Keep showing the last known mower position when temporary sensor glitches occur.
             return;
@@ -69,6 +74,22 @@
         positionValid = true;
         headingDegrees = heading;
     }
+    
+    /**
+     * 妫�鏌ユ槸鍚︽鍦ㄥ鑸瑙堟ā寮�
+     * @return 濡傛灉姝e湪瀵艰埅棰勮杩斿洖true锛屽惁鍒欒繑鍥瀎alse
+     */
+    private boolean isNavigating() {
+        try {
+            dikuai.daohangyulan nav = dikuai.daohangyulan.getInstance();
+            if (nav != null) {
+                return nav.isNavigating();
+            }
+        } catch (Exception e) {
+            // 濡傛灉鑾峰彇瀵艰埅瀹炰緥澶辫触锛岃繑鍥瀎alse锛堜笉褰卞搷涓昏鍔熻兘锛�
+        }
+        return false;
+    }
 
     private void ensurePosition() {
         if (position == null) {
@@ -130,7 +151,8 @@
         double iconHeight = icon.getHeight(null);
         double maxSide = Math.max(iconWidth, iconHeight);
         double scaleFactor = worldSize / Math.max(maxSide, MIN_SCALE);
-        double rotationRadians = Math.toRadians(-headingDegrees);
+        // 鍓茶崏鏈哄浘鏍囬粯璁ゆ湞鍗楋紝Yaw=0琛ㄧず姝e寳锛岄渶瑕佹棆杞�180搴�
+        double rotationRadians = Math.toRadians(headingDegrees + 180);
 
         AffineTransform original = g2d.getTransform();
         AffineTransform transformed = new AffineTransform(original);
@@ -155,9 +177,11 @@
         g2d.fill(fallbackShape);
         g2d.setColor(Color.WHITE);
         g2d.draw(fallbackShape);
-    double rotationRadians = Math.toRadians(-headingDegrees);
-    double lineLength = radius;
-    double dx = lineLength * Math.sin(rotationRadians);
+        // Yaw=0琛ㄧず姝e寳(0, -1)锛屼娇鐢╯in/cos璁$畻鍧愭爣
+        // sin(180)=0, cos(180)=-1 -> 姝e寳
+        double rotationRadians = Math.toRadians(180 - headingDegrees);
+        double lineLength = radius;
+        double dx = lineLength * Math.sin(rotationRadians);
     double dy = lineLength * Math.cos(rotationRadians);
     g2d.drawLine(
         (int) Math.round(position.x),

--
Gitblit v1.10.0