# polyclip

##### Polygon Clipping

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

##### 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 of`A`

and`B`

.`op="union"`

: set union of`A`

and`B`

.`op="minus"`

: set subtraction (sometimes called set difference): the region covered by`A`

that is not covered by`B`

.`op="xor"`

: exclusive set difference (sometimes called exclusive-or): the region covered by exactly one of the sets`A`

and`B`

.

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 components
`x`

and`y`

giving the coordinates of the vertices of a single polygon. The last vertex should not repeat the first vertex. - a
`list`

of`list(x,y)`

structures giving the coordinates of the vertices of several polygons.

*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:

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

##### 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*