https://github.com/cran/spatstat
Revision e575bb3736f6d70d2bd2b23ea2e4474cdbae00be authored by Adrian Baddeley on 11 November 2010, 13:09:43 UTC, committed by cran-robot on 11 November 2010, 13:09:43 UTC
1 parent cafe44b
Tip revision: e575bb3736f6d70d2bd2b23ea2e4474cdbae00be authored by Adrian Baddeley on 11 November 2010, 13:09:43 UTC
version 1.21-1
version 1.21-1
Tip revision: e575bb3
randomseg.R
#
# randomseg.R
#
# $Revision: 1.7 $ $Date: 2008/10/31 21:22:42 $
#
rpoisline <- function(lambda, win=owin()) {
win <- as.owin(win)
if(win$type == "mask")
stop("Not implemented for masks")
# determine circumcircle
xr <- win$xrange
yr <- win$yrange
xmid <- mean(xr)
ymid <- mean(yr)
width <- diff(xr)
height <- diff(yr)
rmax <- sqrt(width^2 + height^2)/2
boundbox <- owin(xmid + c(-1,1) * rmax, ymid + c(-1,1) * rmax)
# generate poisson lines through circumcircle
n <- rpois(1, lambda * 2 * pi * rmax)
if(n == 0)
return(psp(numeric(0), numeric(0), numeric(0), numeric(0),
window=win))
theta <- runif(n, max= 2 * pi)
p <- runif(n, max=rmax)
# compute intersection points with circle
q <- sqrt(rmax^2 - p^2)
co <- cos(theta)
si <- sin(theta)
X <- psp(x0= xmid + p * co + q * si,
y0= ymid + p * si - q * co,
x1= xmid + p * co - q * si,
y1= ymid + p * si + q * co,
window=boundbox, check=FALSE)
# clip to window
X <- X[win]
return(X)
}
rlinegrid <- function(angle=45, spacing=0.1, win=owin()) {
win <- as.owin(win)
if(win$type == "mask")
stop("Not implemented for masks")
# determine circumcircle
width <- diff(win$xrange)
height <- diff(win$yrange)
rmax <- sqrt(width^2 + height^2)/2
xmid <- mean(win$xrange)
ymid <- mean(win$yrange)
# generate randomly-displaced grid of lines through circumcircle
u <- runif(1, min=0, max=spacing) - rmax
if(u >= rmax)
return(psp(numeric(0), numeric(0), numeric(0), numeric(0),
window=win, check=FALSE))
p <- seq(u, rmax, by=spacing)
# compute intersection points with circle
q <- sqrt(rmax^2 - p^2)
theta <- pi * ((angle - 90)/180)
co <- cos(theta)
si <- sin(theta)
X <- psp(x0= xmid + p * co + q * si,
y0= ymid + p * si - q * co,
x1= xmid + p * co - q * si,
y1= ymid + p * si + q * co,
window=owin(xmid+c(-1,1)*rmax, ymid+c(-1,1)*rmax), check=FALSE)
# clip to window
X <- X[win]
return(X)
}
Computing file changes ...