| | |
| | | } |
| | | |
| | | double scaleFactor = Math.max(0.5, scale); // 防止过小缩放 |
| | | double clampedScale = diameterScale > 0 ? diameterScale : 1.0; // 防止非法缩放 |
| | | double minimumDiameter = clampedScale < 1.0 ? 0.5 : 1.0; // 缩小时允许更小的最小值 |
| | | double markerDiameter = Math.max(minimumDiameter, (10.0 / scaleFactor) * 0.2 * clampedScale); // 描点直径 |
| | | // 边界线宽度: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++) { // 遍历有效点 |
| | |
| | | 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); |
| | | } |
| | | } |