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
ygiving 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.
arctolis the maximum permissible distance between the true circular arc and its discretised approximation.
miterlimit * deltais 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
miterlimit=2which 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")
Want to suggest features or report bugs for rdrr.io? Use the GitHub issue tracker.