Given a polygonal region, compute the offset region (aka: guard region, buffer region, morphological dilation) formed by shifting the boundary outwards by a specified distance.
1 2 3 4 5
Data specifying polygons. See Details.
Distance over which the boundary should be shifted.
Spatial resolution for coordinates.
Spatial origin for coordinates.
Tolerance parameters: see Details.
Type of join operation to be performed at each vertex. See Details.
This is part of an interface to the polygon-clipping library
Clipper written by Angus Johnson.
Given a polygonal region
polyoffset computes the offset region
(also known as the morphological dilation, guard region,
buffer region, etc) obtained by shifting the boundary of
outward by the distance
A represents a region in the
Euclidean plane bounded by closed polygons. The format is either
a list containing two components
giving the coordinates of the vertices of a single polygon.
The last vertex should
not repeat the first vertex.
list(x,y) structures giving
the coordinates of the vertices of several polygons.
Note that calculations are performed in integer arithmetic: see below.
jointype determines what happens at the convex vertices
A. See the Examples for illustrations.
jointype="round": a circular arc is generated.
jointype="square": the circular arc is
replaced by a single straight line.
jointype="miter": the circular arc is
omitted entirely, or replaced by a single straight line.
arctol are tolerances.
arctol is the maximum
permissible distance between the true circular arc and its
miterlimit * delta
is the maximum permissible displacement between the original vertex and the
corresponding offset vertex if the circular arc were to be
omitted entirely. The default is
which is also the minimum value.
Calculations are performed in integer arithmetic
x0,y0 from the coordinates,
eps, and rounding to the nearest 64-bit integer.
eps is the effective spatial resolution.
The default values ensure reasonable accuracy.
Data specifying polygons, in the same format as
Angus Johnson. Ported to R by Adrian Baddeley Adrian.Baddeley@curtin.edu.au.
Clipper Website: http://www.angusj.com
Vatti, B. (1992) A generic solution to polygon clipping. Communications of the ACM 35 (7) 56–63. http://portal.acm.org/citation.cfm?id=129906
Agoston, M.K. (2005) Computer graphics and geometric modeling: implementation and algorithms. Springer-Verlag. http://books.google.com/books?q=vatti+clipping+agoston
Chen, X. and McMains, S. (2005) Polygon Offsetting by Computing Winding Numbers. Paper no. DETC2005-85513 in Proceedings of IDETC/CIE 2005 (ASME 2005 International Design Engineering Technical Conferences and Computers and Information in Engineering Conference), pp. 565–575 http://www.me.berkeley.edu/~mcmains/pubs/DAC05OffsetPolygon.pdf
1 2 3 4 5 6 7 8 9 10 11 12 13
A <- list(list(x=c(4,8,8,2,6), y=c(3,3,8,8,6))) plot(c(0,10),c(0,10), type="n", main="jointype=square", axes=FALSE, xlab="", ylab="") polygon(A[], col="grey") C <- polyoffset(A, 1, jointype="square") polygon(C[], lwd=3, border="blue") plot(c(0,10),c(0,10), type="n", main="jointype=round", axes=FALSE, xlab="", ylab="") polygon(A[], col="grey") C <- polyoffset(A, 1, jointype="round") polygon(C[], lwd=3, border="blue") plot(c(0,10),c(0,10), type="n", main="jointype=miter", axes=FALSE, xlab="", ylab="") polygon(A[], col="grey") C <- polyoffset(A, 1, jointype="miter") polygon(C[], lwd=3, border="blue")