minMaxDistance static method

double minMaxDistance(
  1. Envelope a,
  2. Envelope b
)

Computes the Min-Max Distance between two {@link Envelope}s. It is equal to the minimum of the maximum distances between all pairs of edge segments from the two envelopes. This is the tight upper bound on the distance between geometric items bounded by the envelopes.

Theoretically this bound can be used in the R-tree nearest-neighbour branch-and-bound search instead of {@link #maximumDistance(Envelope, Envelope)}. However, little performance improvement is observed in practice.

@param a an envelope @param b an envelope @return the min-max-distance between the envelopes

Implementation

static double minMaxDistance(Envelope a, Envelope b) {
  double aminx = a.getMinX();
  double aminy = a.getMinY();
  double amaxx = a.getMaxX();
  double amaxy = a.getMaxY();
  double bminx = b.getMinX();
  double bminy = b.getMinY();
  double bmaxx = b.getMaxX();
  double bmaxy = b.getMaxY();

  double dist =
      maxDistance(aminx, aminy, aminx, amaxy, bminx, bminy, bminx, bmaxy);
  dist = math.min(dist,
      maxDistance(aminx, aminy, aminx, amaxy, bminx, bminy, bmaxx, bminy));
  dist = math.min(dist,
      maxDistance(aminx, aminy, aminx, amaxy, bmaxx, bmaxy, bminx, bmaxy));
  dist = math.min(dist,
      maxDistance(aminx, aminy, aminx, amaxy, bmaxx, bmaxy, bmaxx, bminy));

  dist = math.min(dist,
      maxDistance(aminx, aminy, amaxx, aminy, bminx, bminy, bminx, bmaxy));
  dist = math.min(dist,
      maxDistance(aminx, aminy, amaxx, aminy, bminx, bminy, bmaxx, bminy));
  dist = math.min(dist,
      maxDistance(aminx, aminy, amaxx, aminy, bmaxx, bmaxy, bminx, bmaxy));
  dist = math.min(dist,
      maxDistance(aminx, aminy, amaxx, aminy, bmaxx, bmaxy, bmaxx, bminy));

  dist = math.min(dist,
      maxDistance(amaxx, amaxy, aminx, amaxy, bminx, bminy, bminx, bmaxy));
  dist = math.min(dist,
      maxDistance(amaxx, amaxy, aminx, amaxy, bminx, bminy, bmaxx, bminy));
  dist = math.min(dist,
      maxDistance(amaxx, amaxy, aminx, amaxy, bmaxx, bmaxy, bminx, bmaxy));
  dist = math.min(dist,
      maxDistance(amaxx, amaxy, aminx, amaxy, bmaxx, bmaxy, bmaxx, bminy));

  dist = math.min(dist,
      maxDistance(amaxx, amaxy, amaxx, aminy, bminx, bminy, bminx, bmaxy));
  dist = math.min(dist,
      maxDistance(amaxx, amaxy, amaxx, aminy, bminx, bminy, bmaxx, bminy));
  dist = math.min(dist,
      maxDistance(amaxx, amaxy, amaxx, aminy, bmaxx, bmaxy, bminx, bmaxy));
  dist = math.min(dist,
      maxDistance(amaxx, amaxy, amaxx, aminy, bmaxx, bmaxy, bmaxx, bminy));

  return dist;
}