// Path: src/main/java/com/github/davidmoten/rtree/geometry/Circle.java
// public interface Circle extends Geometry {
// 
//     double x();
// 
//     double y();
// 
//     double radius();
// 
//     boolean intersects(Circle c);
// 
//     boolean intersects(Point point);
// 
//     boolean intersects(Line line);
// 
// }
// 
// Path: src/main/java/com/github/davidmoten/rtree/geometry/Line.java
// public interface Line extends Geometry {
// 
//     double x1();
// 
//     double y1();
// 
//     double x2();
// 
//     double y2();
// 
//     boolean intersects(Line b);
// 
//     boolean intersects(Point point);
// 
//     boolean intersects(Circle circle);
// 
// }
// 
// Path: src/main/java/com/github/davidmoten/rtree/geometry/Point.java
// public interface Point extends Rectangle {
// 
//     double x();
// 
//     double y();
// 
// }
// 
// Path: src/main/java/com/github/davidmoten/rtree/geometry/Rectangle.java
// public interface Rectangle extends Geometry, HasGeometry {
// 
//     double x1();
// 
//     double y1();
// 
//     double x2();
// 
//     double y2();
// 
//     double area();
// 
//     double intersectionArea(Rectangle r);
// 
//     double perimeter();
// 
//     Rectangle add(Rectangle r);
// 
//     boolean contains(double x, double y);
//     
//     boolean isDoublePrecision();
// 
// }
// 
// Path: src/main/java/com/github/davidmoten/rtree/internal/util/ObjectsHelper.java
// public final class ObjectsHelper {
// 
//     private ObjectsHelper() {
//         // prevent instantiation
//     }
// 
//     @VisibleForTesting
//     static void instantiateForTestCoveragePurposesOnly() {
//         new ObjectsHelper();
//     }
// 
//     @SuppressWarnings("unchecked")
//     public static <T> Optional<T> asClass(Object object, Class<T> cls) {
//         if (object == null) {
//             return Optional.empty();
//         } else if (object.getClass() != cls) {
//             return Optional.empty();
//         } else {
//             return Optional.of((T) object);
//         }
//     }
// 
// }


import com.github.davidmoten.rtree.geometry.Circle;
import com.github.davidmoten.rtree.geometry.Line;
import com.github.davidmoten.rtree.geometry.Point;
import com.github.davidmoten.rtree.geometry.Rectangle;
import com.github.davidmoten.rtree.internal.util.ObjectsHelper;
import java.util.Objects;
import java.util.Optional;
    @Override
    public double x() {
        return x;
    }

    @Override
    public double y() {
        return y;
    }

    @Override
    public double radius() {
        return radius;
    }

    @Override
    public Rectangle mbr() {
        return mbr;
    }

    @Override
    public double distance(Rectangle r) {
        return Math.max(0, GeometryUtil.distance(x, y, r) - radius);
    }

    @Override
    public boolean intersects(Rectangle r) {
        return distance(r) == 0;
    }

// Path: src/main/java/com/github/davidmoten/rtree/geometry/Circle.java
// public interface Circle extends Geometry {
// 
//     double x();
// 
//     double y();
// 
//     double radius();
// 
//     boolean intersects(Circle c);
// 
//     boolean intersects(Point point);
// 
//     boolean intersects(Line line);
// 
// }
// 
// Path: src/main/java/com/github/davidmoten/rtree/geometry/Line.java
// public interface Line extends Geometry {
// 
//     double x1();
// 
//     double y1();
// 
//     double x2();
// 
//     double y2();
// 
//     boolean intersects(Line b);
// 
//     boolean intersects(Point point);
// 
//     boolean intersects(Circle circle);
// 
// }
// 
// Path: src/main/java/com/github/davidmoten/rtree/geometry/Point.java
// public interface Point extends Rectangle {
// 
//     double x();
// 
//     double y();
// 
// }
// 
// Path: src/main/java/com/github/davidmoten/rtree/geometry/Rectangle.java
// public interface Rectangle extends Geometry, HasGeometry {
// 
//     double x1();
// 
//     double y1();
// 
//     double x2();
// 
//     double y2();
// 
//     double area();
// 
//     double intersectionArea(Rectangle r);
// 
//     double perimeter();
// 
//     Rectangle add(Rectangle r);
// 
//     boolean contains(double x, double y);
//     
//     boolean isDoublePrecision();
// 
// }
// 
// Path: src/main/java/com/github/davidmoten/rtree/internal/util/ObjectsHelper.java
// public final class ObjectsHelper {
// 
//     private ObjectsHelper() {
//         // prevent instantiation
//     }
// 
//     @VisibleForTesting
//     static void instantiateForTestCoveragePurposesOnly() {
//         new ObjectsHelper();
//     }
// 
//     @SuppressWarnings("unchecked")
//     public static <T> Optional<T> asClass(Object object, Class<T> cls) {
//         if (object == null) {
//             return Optional.empty();
//         } else if (object.getClass() != cls) {
//             return Optional.empty();
//         } else {
//             return Optional.of((T) object);
//         }
//     }
// 
// }


// Path: src/main/java/com/github/davidmoten/rtree/geometry/internal/CircleFloat.java
import com.github.davidmoten.rtree.geometry.Circle;
import com.github.davidmoten.rtree.geometry.Line;
import com.github.davidmoten.rtree.geometry.Point;
import com.github.davidmoten.rtree.geometry.Rectangle;
import com.github.davidmoten.rtree.internal.util.ObjectsHelper;
import java.util.Objects;
import java.util.Optional;

    @Override
    public double x() {
        return x;
    }

    @Override
    public double y() {
        return y;
    }

    @Override
    public double radius() {
        return radius;
    }

    @Override
    public Rectangle mbr() {
        return mbr;
    }

    @Override
    public double distance(Rectangle r) {
        return Math.max(0, GeometryUtil.distance(x, y, r) - radius);
    }

    @Override
    public boolean intersects(Rectangle r) {
        return distance(r) == 0;
    }

    @Override