Minimal distance between several points.

   DIST = minDistancePoints(PTS)
   Returns the minimum distance between all pairs of points in PTS. PTS
   is a N-by-D array of values, N being the number of points and D the
   dimension of the points.

   DIST = minDistancePoints(PTS1, PTS2)
   Computes for each point in PTS1 the minimal distance to every point of
   PTS2. PTS1 and PTS2 are N-by-D arrays, where N is the number of points,
   and D is the dimension. Dimension must be the same for both arrays, but
   number of points can be different.
   The result is an array the same length as PTS1.


   DIST = minDistancePoints(..., NORM)
   Uses a user-specified norm. NORM=2 means euclidean norm (the default), 
   NORM=1 is the Manhattan (or "taxi-driver") distance.
   Increasing NORM growing up reduces the minimal distance, with a limit
   to the biggest coordinate difference among dimensions. 
   

   [DIST, I, J] = minDistancePoints(PTS)
   Returns indices I and J of the 2 points which are the closest. DIST
   verifies relation:
   DIST = distancePoints(PTS(I,:), PTS(J,:));

   [DIST, J] = minDistancePoints(PTS1, PTS2, ...)
   Also returns the indices of points which are the closest. J has the
   same size as DIST. It verifies relation: 
   DIST(I) = distancePoints(PTS1(I,:), PTS2(J,:));
   for I comprised between 1 and the number of rows in PTS1.


   Examples:
   % minimal distance between random planar points
       points = rand(20,2)*100;
       minDist = minDistancePoints(points);

   % minimal distance between random space points
       points = rand(30,3)*100;
       [minDist ind1 ind2] = minDistancePoints(points);
       minDist
       distancePoints(points(ind1, :), points(ind2, :))
   % results should be the same

   % minimal distance between 2 sets of points
       points1 = rand(30,2)*100;
       points2 = rand(30,2)*100;
       [minDists inds] = minDistancePoints(points1, points2);
       minDists(10)
       distancePoints(points1(10, :), points2(inds(10), :))
   % results should be the same
   
   % Find the (approximated) orthogonal projection onto an ellipse
     elli = [50 50 40 20 30];
     poly = ellipseToPolygon(elli, 200);
     figure; axis equal; axis([0 100 0 100]); hold on;
     drawPolygon(poly, 'k')
     pts = [20 20; 50 20; 80 30];
     [dists, inds] = minDistancePoints(pts, poly);
     drawPoint(pts, 'bo');
     drawPoint(poly(inds,:), 'ko');
     drawEdge([pts poly(inds,:)], 'k')
   

   See Also
     points2d, distancePoints, nndist, findClosestPoint, hausdorffDistance

Package: matgeom