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 ofA
andB
.op="union"
: set union ofA
andB
.op="minus"
: set subtraction (sometimes called set difference):
the region covered byA
that is not covered byB
.op="xor"
: exclusive set difference (sometimes called
exclusive-or): the region covered by exactly one of the setsA
andB
. 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
x
andy
giving the coordinates of the vertices of a single polygon.
The last vertex should
not repeat the first vertex.list
oflist(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