Two-Dimensional Midpoint Rule
The surface is converted to a binary pixel image
using the as.im.function method from package
spatstat.geom (Baddeley et al., 2015).
The integral under the surface is then approximated as the
sum over (pixel area * f(pixel midpoint)).
polyCub.midpoint(polyregion, f, ..., eps = NULL, dimyx = NULL, plot = FALSE)
| polyregion | a polygonal integration domain.
It can be any object coercible to the spatstat.geom class
 | 
| f | a two-dimensional real-valued function. As its first argument it must take a coordinate matrix, i.e., a numeric matrix with two columns, and it must return a numeric vector of length the number of coordinates. | 
| ... | further arguments for  | 
| eps | width and height of the pixels (squares),
see  | 
| dimyx | number of subdivisions in each dimension,
see  | 
| plot | logical indicating if an illustrative plot of the numerical integration should be produced. | 
The approximated value of the integral of f over
polyregion.
Baddeley A, Rubak E, Turner R (2015). Spatial Point Patterns: Methodology and Applications with R. Chapman and Hall/CRC Press, London.
Other polyCub-methods: 
polyCub.SV(),
polyCub.exact.Gauss(),
polyCub.iso(),
polyCub()
## a function to integrate (here: isotropic zero-mean Gaussian density)
f <- function (s, sigma = 5)
    exp(-rowSums(s^2)/2/sigma^2) / (2*pi*sigma^2)
## a simple polygon as integration domain
hexagon <- list(
    list(x = c(7.33, 7.33, 3, -1.33, -1.33, 3),
         y = c(-0.5, 4.5, 7, 4.5, -0.5, -3))
)
if (require("spatstat.geom")) {
    hexagon.owin <- owin(poly = hexagon)
    show_midpoint <- function (eps)
    {
        plotpolyf(hexagon.owin, f, xlim = c(-8,8), ylim = c(-8,8),
                  use.lattice = FALSE)
        ## add evaluation points to plot
        with(as.mask(hexagon.owin, eps = eps),
             points(expand.grid(xcol, yrow), col = t(m), pch = 20))
        title(main = paste("2D midpoint rule with eps =", eps))
    }
    ## show nodes (eps = 0.5)
    show_midpoint(0.5)
    ## show pixel image (eps = 0.5)
    polyCub.midpoint(hexagon.owin, f, eps = 0.5, plot = TRUE)
    ## use a decreasing pixel size (increasing number of nodes)
    for (eps in c(5, 3, 1, 0.5, 0.3, 0.1))
        cat(sprintf("eps = %.1f: %.7f\n", eps,
                    polyCub.midpoint(hexagon.owin, f, eps = eps)))
}Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.