EXPANDPOLYGON Expand a polygon by a given (signed) distance.
POLY2 = expandPolygon(POLY, DIST);
Associates to each edge of the polygon POLY the parallel line located
at distance DIST from the current edge, and compute intersections with
neighbor parallel lines. The input polygon POLY must be oriented
counter-clockwise. Otherwise, distance is computed inside the polygon.
The resulting polygon is simplified to remove inner "loops", and can
eventually be disconnected.
The result POLY2 is a cell array, each cell containing a simple linear
ring.
This is a kind of dilation, but behaviour on corners is different.
This function keeps angles of polygons, but there is no direct relation
between the lengths of each polygon.
It is also possible to specify negative distance, and get all points
inside the polygon. If the polygon is convex, the result equals
morphological erosion of polygon by a ball with radius equal to the
given distance.
Example:
% Computes the negative offset of a non-convex polygon
poly = [10 10;30 10;30 30;20 20;10 30];
poly2 = expandPolygon(poly, -3);
figure;
drawPolygon(poly, 'linewidth', 2);
hold on; drawPolygon(poly2, 'm')
axis equal; axis([0 40 0 40]);
See also:
polygons2d, polygonLoops, polygonSelfIntersections
Package: matgeom