Minkowski Sum of Polygon with Path

Share:

Description

Compute the Minkowski Sum of a polygon with a path or paths.

Usage

1
2
  polyminkowski(A, B, ..., eps, x0, y0,
               closed=TRUE)

Arguments

A

Data specifying a polygon or polygons. See Details.

B

Data specifying a path or paths. See Details.

...

Ignored.

eps

Spatial resolution for coordinates.

x0,y0

Spatial origin for coordinates.

closed

Logical value indicating whether the resulting path should be interpreted as closed (last vertex joined to first vertex and interior filled in).

Details

This is an interface to the function MinkowskiSum in Angus Johnson's C++ library Clipper.

It computes the Minkowski Sum of the polygon A (including its interior) with the path or paths B (excluding their interior).

The argument A should be 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.

The argument B should be either

  • a list containing two components x and y giving the coordinates of the vertices of a single polygon or path. 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 or paths.

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.

Author(s)

Angus Johnson. Ported to R by Adrian Baddeley Adrian.Baddeley@curtin.edu.au.

References

Clipper Website: http://www.angusj.com

See Also

polyclip, polyoffset, polylineoffset, polysimplify

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
  A <- list(list(x=c(-3,3,3,-3),y=c(-3,-3,3,3)))
  B <- list(list(x=c(-1,1,1,-1),y=c(-1,-1,1,1)))
  C <- polyminkowski(A, B)
  opa <- par(mfrow=c(1,3))
  rr <- c(-4, 4)
  plot(rr, rr, type="n", axes=FALSE, xlab="", ylab="", main="A")
  polygon(A[[1]], col="blue")
  plot(rr,rr, type="n", axes=FALSE, xlab="", ylab="", main="B")
  polygon(B[[1]], border="red", lwd=4)
  plot(rr,rr, type="n", axes=FALSE, xlab="", ylab="", main="A+B")
  polygon(C[[1]], col="green")
  polygon(C[[2]], col="white")
  par(opa)