From 6799351be12deb2f713f2c0a2b4c467a6d1098c3 Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期二, 02 十二月 2025 19:51:00 +0800
Subject: [PATCH] 2025122

---
 src/zhangaiwu/Obstacledraw.java |   67 +++++++++++++++++++++++++++------
 1 files changed, 54 insertions(+), 13 deletions(-)

diff --git a/src/zhangaiwu/Obstacledraw.java b/src/zhangaiwu/Obstacledraw.java
index a01e0e0..e5d3223 100644
--- a/src/zhangaiwu/Obstacledraw.java
+++ b/src/zhangaiwu/Obstacledraw.java
@@ -210,21 +210,27 @@
             return;
         }
         
-        // 璁$畻鏍囩浣嶇疆锛堜腑蹇冪偣锛�
-        double centerX = 0;
-        double centerY = 0;
-        
-        for (Obstacledge.XYCoordinate coord : xyCoords) {
-            centerX += coord.getX();
-            centerY += coord.getY();
+        double centerX;
+        double centerY;
+
+        Obstacledge.ObstacleShape shape = obstacle.getShape();
+        if (shape == Obstacledge.ObstacleShape.CIRCLE) {
+            Obstacledge.XYCoordinate centerCoord = xyCoords.get(0);
+            centerX = centerCoord.getX();
+            centerY = centerCoord.getY();
+        } else {
+            Point2D.Double centroid = computePolygonCentroid(xyCoords);
+            centerX = centroid.x;
+            centerY = centroid.y;
         }
         
-        centerX /= xyCoords.size();
-        centerY /= xyCoords.size();
-        
-        // 鑾峰彇闅滅鐗╁悕绉板拰褰㈢姸
+        // 鑾峰彇闅滅鐗╁悕绉�
         String obstacleName = obstacle.getObstacleName();
-        String shapeDesc = obstacle.getShape().getDescription();
+        if (obstacleName == null || obstacleName.trim().isEmpty()) {
+            obstacleName = "闅滅鐗�";
+        } else {
+            obstacleName = obstacleName.trim();
+        }
         
         // 璁剧疆瀛椾綋鍜岄鑹�
         g2d.setColor(OBSTACLE_LABEL_COLOR);
@@ -236,7 +242,7 @@
         g2d.setFont(new Font("寰蒋闆呴粦", Font.PLAIN, fontSize));
         
         // 缁樺埗鏍囩
-        String label = String.format("%s(%s)", obstacleName, shapeDesc);
+    String label = obstacleName;
         FontMetrics metrics = g2d.getFontMetrics();
         int textWidth = metrics.stringWidth(label);
         int textHeight = metrics.getHeight();
@@ -247,6 +253,41 @@
         
         g2d.drawString(label, textX, textY);
     }
+
+    private static Point2D.Double computePolygonCentroid(List<Obstacledge.XYCoordinate> xyCoords) {
+        double area = 0.0;
+        double cx = 0.0;
+        double cy = 0.0;
+        int n = xyCoords.size();
+        for (int i = 0; i < n; i++) {
+            Obstacledge.XYCoordinate current = xyCoords.get(i);
+            Obstacledge.XYCoordinate next = xyCoords.get((i + 1) % n);
+            double x0 = current.getX();
+            double y0 = current.getY();
+            double x1 = next.getX();
+            double y1 = next.getY();
+            double cross = x0 * y1 - x1 * y0;
+            area += cross;
+            cx += (x0 + x1) * cross;
+            cy += (y0 + y1) * cross;
+        }
+
+        double areaFactor = area * 0.5;
+        if (Math.abs(areaFactor) < 1e-9) {
+            double avgX = 0.0;
+            double avgY = 0.0;
+            for (Obstacledge.XYCoordinate coord : xyCoords) {
+                avgX += coord.getX();
+                avgY += coord.getY();
+            }
+            int size = Math.max(1, xyCoords.size());
+            return new Point2D.Double(avgX / size, avgY / size);
+        }
+
+        double centroidX = cx / (6.0 * areaFactor);
+        double centroidY = cy / (6.0 * areaFactor);
+        return new Point2D.Double(centroidX, centroidY);
+    }
     
     /**
      * 妫�鏌ョ偣鏄惁鍦ㄩ殰纰嶇墿鍐�

--
Gitblit v1.10.0