- で、に黄金角に近い値を用いて、n=1,2,...で打点する。
- その点分布に対してボロノイ図を描く
n <- 200
x <- (1+sqrt(5))/2
delta <- 0.1
phi <- 2*pi * (x + delta)
x <- sqrt(1:n) * cos((1:n) * phi)
y <- sqrt(1:n) * sin((1:n) * phi)
X <- cbind(x,y)
plot(X,pch=20,cex=0.1)
install.packages(c("deldir","sp"))
voronoipolygons <- function(x) {
require(deldir)
require(sp)
if (.hasSlot(x, 'coords')) {
crds <- x@coords
} else crds <- x
z <- deldir(crds[,1], crds[,2])
w <- tile.list(z)
polys <- vector(mode='list', length=length(w))
for (i in seq(along=polys)) {
pcrds <- cbind(w[[i]]$x, w[[i]]$y)
pcrds <- rbind(pcrds, pcrds[1,])
polys[[i]] <- Polygons(list(Polygon(pcrds)), ID=as.character(i))
}
SP <- SpatialPolygons(polys)
voronoi <- SpatialPolygonsDataFrame(SP, data=data.frame(x=crds[,1],
y=crds[,2], row.names=sapply(slot(SP, 'polygons'),
function(x) slot(x, 'ID'))))
}
v <- voronoipolygons(X)
plot(v)
points(X,pch=20,cex=0.1,col="red")