final double getMindist(Point2D.Double pt) {
		double result = Double.MAX_VALUE;
		for (Point2D p : points.keySet()) {
			if (pt.equals(p)) {
				continue;
			}
			final double v = p.distance(pt);
			if (v < 1E-4) {
				throw new IllegalStateException();
			}
			result = Math.min(result, v);
		}
		for (Line2D line : lines) {
			if (line.getP1().equals(pt) || line.getP2().equals(pt)) {
				continue;
			}
			final double v = line.ptSegDist(pt);
			if (result < 1E-4) {
				throw new IllegalStateException("pt=" + pt + " line=" + GeomUtils.toString(line));
			}
			result = Math.min(result, v);
		}
		if (result == 0) {
			throw new IllegalStateException();
		}
		// Log.println("getMindist=" + result);
		return result;
	}