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
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);