Home > matGeom > polygons2d > distancePolygons.m

distancePolygons

PURPOSE ^

DISTANCEPOLYGONS Compute the shortest distance between 2 polygons.

SYNOPSIS ^

function dist = distancePolygons(poly1, poly2)

DESCRIPTION ^

DISTANCEPOLYGONS Compute the shortest distance between 2 polygons.

   DIST = distancePolygons(POLY1, POLY2)
   Computes the shortest distance between the boundaries of the two
   polygons. Each polygon is given by a N-by-2 array containing the vertex
   coordinates.

   In the case the two polygons are known not to intersect, the function
   'distancePolygonsNoCross' may be used more efficiently (no test for
   crossing is done).

   Example
     % Computes the distance between a square and a triangle
     poly1 = [10 10;20 10;20 20;10 20];
     poly2 = [30 20;50 20;40 45];
     distancePolygons(poly1, poly2)
     ans =
         10

   See also
   polygons2d, distancePolygonsNoCross, distancePolylines,
   distancePointPolygon

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function dist = distancePolygons(poly1, poly2)
0002 %DISTANCEPOLYGONS Compute the shortest distance between 2 polygons.
0003 %
0004 %   DIST = distancePolygons(POLY1, POLY2)
0005 %   Computes the shortest distance between the boundaries of the two
0006 %   polygons. Each polygon is given by a N-by-2 array containing the vertex
0007 %   coordinates.
0008 %
0009 %   In the case the two polygons are known not to intersect, the function
0010 %   'distancePolygonsNoCross' may be used more efficiently (no test for
0011 %   crossing is done).
0012 %
0013 %   Example
0014 %     % Computes the distance between a square and a triangle
0015 %     poly1 = [10 10;20 10;20 20;10 20];
0016 %     poly2 = [30 20;50 20;40 45];
0017 %     distancePolygons(poly1, poly2)
0018 %     ans =
0019 %         10
0020 %
0021 %   See also
0022 %   polygons2d, distancePolygonsNoCross, distancePolylines,
0023 %   distancePointPolygon
0024 %
0025 
0026 % ------
0027 % Author: David Legland
0028 % e-mail: david.legland@nantes.inra.fr
0029 % Created: 2009-06-17,    using Matlab 7.7.0.471 (R2008b)
0030 % Copyright 2009 INRA - Cepia Software Platform.
0031 
0032 % cjeck if the two polygons intersect
0033 pts = intersectPolylines(poly1([1:end 1], :), poly2([1:end 1], :));
0034 if size(pts, 1) > 0
0035     dist = 0;
0036     return;
0037 end
0038 
0039 % compute distance of each vertex of a polygon to the other polygon
0040 dist1   = min(distancePointPolygon(poly1, poly2));
0041 dist2   = min(distancePointPolygon(poly2, poly1));
0042 
0043 % keep the minimum of the two distances
0044 dist = min(dist1, dist2);

Generated on Wed 16-Feb-2022 15:10:47 by m2html © 2003-2019