2014-06-30 53 views
1

如果我在R中有一个spatialpolygons对象,如何生成一组位于该多边形边上的n个点?R中多边形边上的采样点

我本来以为我可以从多边形顶点样,但它看起来像有绵延有时在没有顶点,因为多边形边缘是直线......

回答

1

假设你想画点围绕周边,我会分成两个部分这样:

P(上缘部E点P)= P(点p |边E)P(边e)

与P(边e)正比于它的长度。所以先取样边缘,然后在其上取样点 。

下面是一个例子三角:

poly <- Polygon(list(x=c(1,2,3,1),y=c(1,2,1,1))) 

我们将计算长度边:

require(gsl) #for fast hypot function 
    xy <- [email protected] 
    dxy <- diff(xy) 
    h <- hypot(dxy[,"x"], dxy[,"y"]) 

并绘制一个随机的一面:

e <- sample(nrow(dxy), 1, probs=h) 

再画一个指向那边:

u <- runif(1) 
    p <- xy[e,] + u * dxy[e,] 

结束语整个事情的功能,我们有:

rPointOnPerimeter <- function(n, poly) { 
    xy <- [email protected] 
    dxy <- diff(xy) 
    h <- hypot(dxy[,"x"], dxy[,"y"]) 

    e <- sample(nrow(dxy), n,replace=TRUE, prob=h) 

    u <- runif(n) 
    p <- xy[e,] + u * dxy[e,] 

    p 
    } 

与演示:

plot(rPointOnPerimeter(100,poly)) 
+0

这是极好的。谢谢。 – Pascal

+0

此代码示例是否具有python版本?我不懂R语言 – machen