826220679@qq.com
9 小时以前 69b40096cb0ae965f2a3e92672b880edfe7d04d2
src/zhuye/pointandnumber.java
@@ -20,7 +20,8 @@
                                          List<Point2D.Double> boundary, // 边界点集合
                                          double scale, // 缩放比例
                                          double mergeThreshold, // 合并阈值
                                          Color pointColor) { // 点颜色
                                          Color pointColor, // 点颜色
                                          double diameterScale) { // 直径缩放因子
        if (boundary == null || boundary.size() < 2) { // 判断数据是否有效
            return; // 无效直接返回
        }
@@ -32,8 +33,15 @@
            return; // 无效返回
        }
        double scaleFactor = Math.max(0.5, scale); // 防止过小缩放
        double markerDiameter = Math.max(1.0, (10.0 / scaleFactor) * 0.2); // 描点直径
    double scaleFactor = Math.max(0.5, scale); // 防止过小缩放
    // 边界线宽度:3 / Math.max(0.5, scale)
    // 边界点直径 = 边界线宽度的2倍
    double boundaryLineWidth = 3.0 / scaleFactor; // 边界线宽度
    double markerDiameter = boundaryLineWidth * 2.0; // 描点直径(边界线宽度的2倍)
    // 应用直径缩放因子
    if (diameterScale > 0.0 && isFinite(diameterScale)) {
        markerDiameter *= diameterScale;
    }
        double markerRadius = markerDiameter / 2.0; // 半径
        for (int i = 0; i < effectiveCount; i++) { // 遍历有效点
@@ -55,4 +63,12 @@
        double dy = a.y - b.y; // Y差值
        return Math.hypot(dx, dy) <= threshold; // 距离判断
    }
    /**
     * 检查double值是否有限(不是NaN或无穷大)
     * 兼容低版本Java
     */
    private static boolean isFinite(double value) {
        return !Double.isNaN(value) && !Double.isInfinite(value);
    }
}