Sample uniformly within a fixed radius.

May 16, 2014
By

(This article was first published on Quantitative Ecology, and kindly contributed to R-bloggers)

I was asked how to do this today and thought that I would share the answer:

## Sample points uniformly within a fixed radius

nrand=1000
maxstep=10

## Sample data
## NB: To get a truly uniform sample over the circle, you must
## sample the square of the distance and then transform back.
tempdat<-data.frame(X0=0,Y0=0, bearing0=0,
bad.dist= runif(nrand)*maxstep,
dist2=sqrt(runif(nrand)*maxstep^2),
turningangle=runif(nrand)*2*pi-pi)

##convert Turning angle to bearing (in this case no change)
tempdat$bearing=tempdat$bearing0+tempdat$turningangle

## Convert from polar to cartesian coordinates
tempdat$X<-tempdat$X0+tempdat$dist2*sin(tempdat$bearing)
tempdat$Y<-tempdat$Y0+tempdat$dist2*cos(tempdat$bearing)

tempdat$Xbad<-tempdat$X0+tempdat$bad.dist*sin(tempdat$bearing)
tempdat$Ybad<-tempdat$Y0+tempdat$bad.dist*cos(tempdat$bearing)


##make plots
png(filename="sampleplots.png",width=500,height=1000)
par(mfrow=c(2,1))
plot(Ybad~Xbad, data=tempdat, asp=1, main="Center is oversampled")
plot(Y~X, data=tempdat, asp=1, main="Uniform across space")
dev.off()

To leave a comment for the author, please follow the link and comment on his blog: Quantitative Ecology.

R-bloggers.com offers daily e-mail updates about R news and tutorials on topics such as: visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...



If you got this far, why not subscribe for updates from the site? Choose your flavor: e-mail, twitter, RSS, or facebook...

Comments are closed.