> d
[,1] [,2]
1 -0.5561835 1.49947588
2 -2.3985544 3.07130217
3 -3.8833659 -4.29331711
4 3.1025836 5.45359160
5 0.7438354 -2.80116065
6 7.0787294 -2.78121213
7 -1.6633598 -1.17898157
8 -0.6751930 0.03466162
9 1.4633841 0.50173157
10 -3.2118758 0.49390863
上表给出了我想要绘制的图的x(第1列)和y(第2列)坐标。
require(MASS) # for sammon using which i generated the above coordinates
require(deldir) # for voronoi tessellations
dd <- deldir(d[,1], d[,2]) # voronoi tessellations
plot(dd,wlines="tess") # This will give me tessellations
我希望我的下一个镶嵌在上面的镶嵌中绘制在一个区域中。我可以使用dd $ dirsgs获得形成镶嵌细分的线条。在此,曲面细分中的每条线都以其终点给出。其前四列分别给出了x1,y1和x2,y2坐标。这些坐标是该线的终点。使用此数据,我可以在上面的曲面细分中绘制这一区域中的下一个子曲面细分。
对于下一个子镶嵌,您可以生成所选的坐标。但我只是希望它们位于上面绘制的曲面细分的一个区域中。
dd $ dirsgs中的ind 1和ind2给出了'd'中的点,它们由dd $ dirsgs的前4列表示的行分隔。
例如,如果我们想在包含d中第一个点的图中绘制子镶嵌,则行1,2,9,12,17是形成d中第一个点的边界的行。使用此信息,我们可以绘制该区域内的子镶嵌吗? -
我想我已经涵盖了理解我的问题所必需的所有事情。如果还有其他数据我没有包含在内,请告诉我。我会提供信息。
答案 0 :(得分:2)
我理解它的方式(并且我的意思是如果我理解你的问题),因为plot.deldir
允许传递参数add=TRUE
,它可以直接完成。
d<-structure(list(V1 = c(-0.5561835, -2.3985544, -3.8833659, 3.1025836, 0.7438354,
7.0787294, -1.6633598, -0.675193, 1.4633841, -3.2118758), V2 =
c(1.49947588, 3.07130217, -4.29331711, 5.4535916, -2.80116065,
-2.78121213, -1.17898157, 0.03466162, 0.50173157, 0.49390863)), .Names =
c("V1","V2"), class = "data.frame", row.names = c(NA, -10L))
library(MASS)
library(deldir)
dd <- deldir(d[,1], d[,2])
plot(dd, wlines="tess")
首先让我们提取多边形的数据:正如你在评论中注意到的那样,它需要我之前想过的更多处理,因为plot.deldir
中的多边形是逐行绘制的而不是多边形之后的多边形所以它的顺序是在dd$dirsgs
中对行进行了加扰。
ddd <- as.matrix(dd$dirsgs[dd$dirsgs$ind2==1,1:4])
d1poly <- rbind(ddd[1,1:2],ddd[1,3:4])
for( i in 2:nrow(ddd)){
x <- ddd[ddd[,1]==d1poly[i,1], 3:4]
d1poly <- rbind(d1poly, x)
}
d1poly
x2 y2
-2.096990 1.559118
0.303986 4.373353
x 1.550185 3.220238
x 0.301414 0.692558
x -1.834581 0.866098
x -2.096990 1.559118
让我们使用包splancs
:
library(splancs)
rd <- csr(as.matrix(d1poly),10) # For 10 random points in the polygon containing point 1
rd
xc yc
[1,] -1.6904093 1.9281052
[2,] -1.1321334 1.7363064
[3,] 0.2264649 1.3986126
[4,] -1.1883844 2.5996515
[5,] -0.6929208 0.8745020
[6,] -0.8348241 2.3318222
[7,] 0.9101748 1.9439797
[8,] 0.1665160 1.8754703
[9,] -1.1100710 1.3517257
[10,] -1.5691826 0.8782223
rdd <- deldir(c(rd[,1],d[1,1]),c(rd[,2],d[1,2]))
# don't forget to add the coordinates of your point 1 so it s part of the sub-tessellation
plot(dd, wlines="tess")
plot(rdd, add=TRUE, wlines="tess")
修改强>
关于限制边界内的线条,我能想到的唯一解决方案是一个非常难看的解决方法:首先绘制子剖面,然后隐藏感兴趣的多边形的外部,然后绘制全局细分。
plot(dd, wlines="tess", col="white", wpoints="none")
plot(rdd, wlines="tess", add=TRUE)
plotlim <- cbind(par()$usr[c(1,2,2,1)],par()$usr[c(3,3,4,4)])
extpoly <- rbind(plotlim, d1poly)
#Here the first point of d1poly is oriented toward the upper left corner: if it is oriented otherwise the order of plotlim has to be changed accordingly
polygon(extpoly, border=NA, col="white")
plot(dd, wlines="tess", add=TRUE)
答案 1 :(得分:1)
您可能需要考虑使用spatstat
包,因为它可以极大地简化将新曲面细分约束到现有曲面细分的图块。您的设置将如下所示:
library(spatstat)
# Plot the main tessellation and points
d<-structure(list(V1 = c(-0.5561835, -2.3985544, -3.8833659, 3.1025836, 0.7438354,
7.0787294, -1.6633598, -0.675193, 1.4633841, -3.2118758), V2 =
c(1.49947588, 3.07130217, -4.29331711, 5.4535916, -2.80116065,
-2.78121213, -1.17898157, 0.03466162, 0.50173157, 0.49390863)), .Names =
c("V1","V2"), class = "data.frame", row.names = c(NA, -10L))
d_points <- ppp(d$V1, d$V2, window=owin(c(-5, 8), c(-6, 6)))
main_tessellation <- dirichlet(d_points)
plot(main_tessellation, lty=3) # plot the tessellation
plot(d_points, add=TRUE) # add the points
# Plot the interior tessellation and points (color=red so the difference is clear)
# Arbitrarily choosing the 9th tile from the above tessellation:
target_poly <- owin(poly=main_tessellation$tiles[[9]]$bdry[[1]])
# Generate random set of points within the boundaries of the polygon chosen above
new_points <- runifpoint(6, win=target_poly)
# Generate and plot the new tessellation and points
new_tessellation <- dirichlet(new_points)
plot(new_tessellation, add=TRUE, col='red')
plot(new_points, add=TRUE, col='red')
哪个会产生:
请参阅此密切相关的问题:Voronoi diagram polygons enclosed in geographic borders