/** Compute external distance. *@param distanceStyle is the distance style. *@param x is the point x. *@param y is the point y. *@param z is the point z. *@return the distance metric. */ public double outsideDistance(final DistanceStyle distanceStyle, final double x, final double y, final double z) { return distanceStyle.computeDistance(this.point, x, y, z); }
/** Compute the distance from a plane to a point. * @param planetModel The planet model * @param plane The plane * @param point The point * @param bounds are the plane bounds * @return the distance */ public default double computeDistance(final PlanetModel planetModel, final Plane plane, final GeoPoint point, final Membership... bounds) { return computeDistance(planetModel, plane, point.x, point.y, point.z, bounds); }
/** Compute external distance. *@param distanceStyle is the distance style. *@param x is the point x. *@param y is the point y. *@param z is the point z. *@return the distance metric. */ public double outsideDistance(final DistanceStyle distanceStyle, final double x, final double y, final double z) { return distanceStyle.computeDistance(this.point, x, y, z); }
@Override protected double outsideDistance(final DistanceStyle distanceStyle, final double x, final double y, final double z) { double outsideDistance = Double.POSITIVE_INFINITY; for (final CircleSlice slice : circleSlices) { final double distance = distanceStyle.computeDistance(planetModel, slice.circlePlane, x, y, z, slice.plane1, slice.plane2); if (distance < outsideDistance) { outsideDistance = distance; } } return outsideDistance; }
@Override protected double distance(final DistanceStyle distanceStyle, final double x, final double y, final double z) { return distanceStyle.computeDistance(this.center, x, y, z); }
@Override protected double outsideDistance(final DistanceStyle distanceStyle, final double x, final double y, final double z) { return distanceStyle.computeDistance(planetModel, topPlane, x,y,z); }
/** Compute the distance from a point to another point. * @param point1 Starting point * @param point2 Final point * @return the distance */ public default double computeDistance(final GeoPoint point1, final GeoPoint point2) { return computeDistance(point1, point2.x, point2.y, point2.z); }
@Override protected double outsideDistance(final DistanceStyle distanceStyle, final double x, final double y, final double z) { return distanceStyle.computeDistance(planetModel, bottomPlane, x,y,z); }
@Override protected double outsideDistance(final DistanceStyle distanceStyle, final double x, final double y, final double z) { return distanceStyle.computeDistance(planetModel, plane, x,y,z); }
@Override protected double outsideDistance(final DistanceStyle distanceStyle, final double x, final double y, final double z) { final double distance = distanceStyle.computeDistance(planetModel, plane, x,y,z, boundingPlane); final double northDistance = distanceStyle.computeDistance(planetModel.NORTH_POLE, x,y,z); final double southDistance = distanceStyle.computeDistance(planetModel.SOUTH_POLE, x,y,z); return Math.min( distance, Math.min(northDistance, southDistance)); }
@Override protected double outsideDistance(final DistanceStyle distanceStyle, final double x, final double y, final double z) { final double distance = distanceStyle.computeDistance(planetModel, plane, x,y,z, leftPlane, rightPlane); final double LHCDistance = distanceStyle.computeDistance(LHC, x,y,z); final double RHCDistance = distanceStyle.computeDistance(RHC, x,y,z); return Math.min( distance, Math.min(LHCDistance, RHCDistance)); }
@Override protected double outsideDistance(final DistanceStyle distanceStyle, final double x, final double y, final double z) { final double topDistance = distanceStyle.computeDistance(planetModel, topPlane, x,y,z, bottomPlane); final double bottomDistance = distanceStyle.computeDistance(planetModel, bottomPlane, x,y,z, topPlane); return Math.min(topDistance, bottomDistance); }
@Override protected double outsideDistance(final DistanceStyle distanceStyle, final double x, final double y, final double z) { final double leftDistance = distanceStyle.computeDistance(planetModel, leftPlane, x,y,z, rightPlane); final double rightDistance = distanceStyle.computeDistance(planetModel, rightPlane, x,y,z, leftPlane); final double northDistance = distanceStyle.computeDistance(planetModel.NORTH_POLE, x,y,z); final double southDistance = distanceStyle.computeDistance(planetModel.SOUTH_POLE, x,y,z); return Math.min( Math.min(northDistance, southDistance), Math.min(leftDistance, rightDistance)); }
@Override protected double outsideDistance(final DistanceStyle distanceStyle, final double x, final double y, final double z) { final double distance = distanceStyle.computeDistance(planetModel, plane, x,y,z, topPlane, bottomPlane, boundingPlane); final double UHCDistance = distanceStyle.computeDistance(UHC, x,y,z); final double LHCDistance = distanceStyle.computeDistance(LHC, x,y,z); return Math.min( distance, Math.min(UHCDistance, LHCDistance)); }
@Override protected double outsideDistance(final DistanceStyle distanceStyle, final double x, final double y, final double z) { final double distance = distanceStyle.computeDistance(planetModel, plane, x,y,z, eitherBound); final double LHCDistance = distanceStyle.computeDistance(LHC, x,y,z); final double RHCDistance = distanceStyle.computeDistance(RHC, x,y,z); return Math.min( distance, Math.min(LHCDistance, RHCDistance)); }
@Override protected double outsideDistance(final DistanceStyle distanceStyle, final double x, final double y, final double z) { // Because the rectangle exceeds 180 degrees, it is safe to compute the horizontally // unbounded distance to both the left and the right and only take the minimum of the two. final double leftDistance = distanceStyle.computeDistance(planetModel, leftPlane, x,y,z); final double rightDistance = distanceStyle.computeDistance(planetModel, rightPlane, x,y,z); final double northDistance = distanceStyle.computeDistance(planetModel.NORTH_POLE, x,y,z); final double southDistance = distanceStyle.computeDistance(planetModel.SOUTH_POLE, x,y,z); return Math.min( Math.min(leftDistance, rightDistance), Math.min(northDistance, southDistance)); }
@Override protected double outsideDistance(final DistanceStyle distanceStyle, final double x, final double y, final double z) { final double topDistance = distanceStyle.computeDistance(planetModel, topPlane, x,y,z, leftPlane, rightPlane); final double leftDistance = distanceStyle.computeDistance(planetModel, leftPlane, x,y,z, rightPlane, topPlane); final double rightDistance = distanceStyle.computeDistance(planetModel, rightPlane, x,y,z, leftPlane, topPlane); final double ULHCDistance = distanceStyle.computeDistance(ULHC, x,y,z); final double URHCDistance = distanceStyle.computeDistance(URHC, x,y,z); return Math.min( Math.min( topDistance, Math.min(leftDistance, rightDistance)), Math.min(ULHCDistance, URHCDistance)); }
/** Compute the full distance along this path segment. *@param distanceStyle is the distance style. *@return the distance metric, in aggregation form. */ public double fullPathDistance(final DistanceStyle distanceStyle) { synchronized (fullDistanceCache) { Double dist = fullDistanceCache.get(distanceStyle); if (dist == null) { dist = distanceStyle.toAggregationForm(distanceStyle.computeDistance(start, end.x, end.y, end.z)); fullDistanceCache.put(distanceStyle, dist); } return dist.doubleValue(); } }
/** Compute interior path distance. *@param distanceStyle is the distance style. *@param x is the point x. *@param y is the point y. *@param z is the point z. *@return the distance metric, in aggregation form. */ public double pathDistance(final DistanceStyle distanceStyle, final double x, final double y, final double z) { if (!isWithin(x,y,z)) return Double.POSITIVE_INFINITY; return distanceStyle.toAggregationForm(distanceStyle.computeDistance(this.point, x, y, z)); }
/** Compute interior path distance. *@param distanceStyle is the distance style. *@param x is the point x. *@param y is the point y. *@param z is the point z. *@return the distance metric, in aggregation form. */ public double pathDistance(final DistanceStyle distanceStyle, final double x, final double y, final double z) { if (!isWithin(x,y,z)) return Double.POSITIVE_INFINITY; return distanceStyle.toAggregationForm(distanceStyle.computeDistance(this.point, x, y, z)); }