polyclip

0th

Percentile

Polygon Clipping

Find intersection, union or set difference of two polygonal regions.

Keywords
spatial, math
Usage
polyclip(A, B, op=c("intersection", "union", "minus", "xor"),
         ...,
         eps, x0, y0,
         fillA=c("evenodd", "nonzero", "positive", "negative"),
         fillB=c("evenodd", "nonzero", "positive", "negative"))
Arguments
A,B
Data specifying polygons. See Details.
op
Set operation to be performed to combine A and B.
...
Ignored.
eps
Spatial resolution for coordinates.
x0,y0
Spatial origin for coordinates.
fillA,fillB
Polygon-filling rule for A and B.
Details

This is an interface to the polygon-clipping library Clipper written by Angus Johnson.

Given two polygonal regions A and B the function polyclip performs one of the following geometrical operations:

  • op="intersection": set intersection ofAandB.
  • op="union": set union ofAandB.
  • op="minus": set subtraction (sometimes called set difference): the region covered byAthat is not covered byB.
  • op="xor": exclusive set difference (sometimes called exclusive-or): the region covered by exactly one of the setsAandB.

Each of the arguments A and B represents a region in the Euclidean plane bounded by closed polygons. The format of these arguments is either

  • a list containing two componentsxandygiving the coordinates of the vertices of a single polygon. The last vertex should not repeat the first vertex.
  • alistoflist(x,y)structures giving the coordinates of the vertices of several polygons.
Note that calculations are performed in integer arithmetic: see below. The interpretation of the polygons depends on the polygon-filling rule for A and B that is specified by the arguments fillA and fillB respectively. [object Object],[object Object],[object Object],[object Object]

Calculations are performed in integer arithmetic after subtracting x0,y0 from the coordinates, dividing by eps, and rounding to the nearest integer. Thus, eps is the effective spatial resolution. The default values ensure reasonable accuracy.

Value

  • Data specifying polygons, in the same format as A and code{B}.

References

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

Aliases
  • polyclip
Examples
A <- list(list(x=1:10, y=c(1:5,5:1)))
  B <- list(list(x=c(2,8,8,2),y=c(0,0,10,10)))
  plot(c(0,10),c(0,10), type="n", axes=FALSE)
  polygon(A[[1]])
  polygon(B[[1]])
  C <- polyclip(A, B)
  polygon(C[[1]], lwd=3, col=3)
Documentation reproduced from package polyclip, version 0.0-1, License: BSL

Community examples

Looks like there are no examples yet.