polyclip(A, B, op=c("intersection", "union", "minus", "xor"),
...,
eps, x0, y0,
fillA=c("evenodd", "nonzero", "positive", "negative"),
fillB=c("evenodd", "nonzero", "positive", "negative"))A and B.A and B.A and code{B}.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
xandygiving the coordinates of the vertices of a single polygon.
The last vertex should
not repeat the first vertex.listoflist(x,y)structures giving
the coordinates of the vertices of several polygons.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.
Vatti, B. (1992) A generic solution to polygon clipping.
Communications of the ACM 35 (7) 56--63.
Agoston, M.K. (2005)
Computer graphics and geometric modeling:
implementation and algorithms.
Springer-Verlag.
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
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)Run the code above in your browser using DataLab