我正在研究的统计问题似乎要求在计算几何中将某些已知的事物称为“离线正交范围计数”:
假设我有一组 n 点(目前,在飞机上)。对于每对点 i 和 j ,我想计算集合中剩余点的数量,矩形的对角线是具有端点的段我和 j 。然后,总输出是 [0,1,2,...,n-2] 中 n(n-1)值的向量。
我已经看到关于这个问题的丰富文献(或者至少是一个非常类似的问题)存在,但我找不到实现。我更喜欢R(一种统计计算语言)软件包,但我想这太过要求了。开源C / C ++实现也可以。
感谢。
答案 0 :(得分:0)
我希望我能理解你的问题。这是R中使用包geometry
的实现。我使用
mesh.drectangle
函数来计算从点p到矩形边界的有符号距离。
combn
例如
library(geometry)
## I generate some data
set.seed(1234)
p.x <- sample(1:100,size=30,replace=T)
p.y <- sample(1:100,size=30,replace=T)
points <- cbind(p.x,p.y)
## the algortithm
ll <- combn(1:nrow(points),2,function(x){
x1<- p.x[x[1]]; y1 <- p.y[x[1]]
x2<- p.x[x[2]]; y2 <- p.y[x[2]]
p <- points[-x,]
d <- mesh.drectangle(p,x1,y1,x2,y2)
res <- NA
if(length(which(d <0))){
points.in = as.data.frame(p,ncol=2)[ d < 0 , ]
res <- list(n = nrow(points.in),
rect = list(x1=x1,x2=x2,y1=y1,y2=y2),
points.in = points.in)
}
res
},simplify=F)
ll <- ll[!is.na(ll)]
## the result
nn <- do.call(rbind,lapply(ll,'[[','n'))
为了使结果可视化,我绘制了例如5个点的矩形。
library(grid)
grid.newpage()
vp <- plotViewport(xscale = extendrange(p.x),
yscale = extendrange(p.y))
pushViewport(vp)
grid.xaxis()
grid.yaxis()
grid.points(x=points[,'p.x'],y=points[,'p.y'],pch='*')
cols <- rainbow(length(ll))
ll <- ll[nn == 5] ## here I plot only the rectangle with 5 points
lapply(seq_along(ll),function(i){
x <- ll[[i]]
col <- sample(cols,1)
x1<- x$rect$x1; x2<- x$rect$x2
y1<- x$rect$y1; y2<- x$rect$y2
grid.rect(x=(x1+x2)*.5,y=(y1+y2)*.5,
width= x2-x1,height = y2-y1,
default.units ='native',
gp=gpar(fill=col,col='red',alpha=0.2)
)
grid.points(x=x$points.in$p.x,y=x$points.in$p.y,pch=19,
gp=gpar(col=rep(col,x$n)))
}
)
upViewport()