gpt4 book ai didi

多边形的行排序

转载 作者:行者123 更新时间:2023-12-04 15:11:08 27 4
gpt4 key购买 nike

我的问题很简单。是否有自动排序数据的方法,以便制作“干净”的多边形?我有生成环的函数(特别是 ahull 函数),我想要一种使用这些函数干净地生成多边形的方法。这是一个例子。

x <- c(1:3, 3:1, 1)
y <- c(1,1,1,3,3,2, 1)
xy <- cbind(x,y)

Sr1 <- Polygon(xy)
Srs1 = Polygons(list(Sr1), "s1")
SpP = SpatialPolygons(list(Srs1))
plot(SpP)

z <- runif(7)
xyz <- cbind(x,y,z)
xyz <- xyz[order(z),]

xy <- xyz[,-3]
xy <- rbind(xy, xy[1,])

Sr1 <- Polygon(xy)
Srs1 = Polygons(list(Sr1), "s1")
SpP = SpatialPolygons(list(Srs1))
SpP = SpatialPolygons(list(Srs1))
plot(SpP)

这是我的真实数据: https://drive.google.com/file/d/0B8QG4cbDqH0UOUlobnlWaDgwOWs/edit?usp=sharing

最佳答案

从某种意义上说,你已经回答了你自己的问题。

假设您有一组点,并且您使用 ahull(...)alphahull包生成凸包,您可以直接从ahull中以正确的顺序提取边界上的点目的。下面是一个例子:

library(sp)
library(alphahull)
set.seed(1) # for reproducible example
X <- rnorm(100)
Y <- rnorm(100)
plot(X,Y)
XY <- cbind(X,Y)
hull <- ahull(XY,alpha=1)
plot(hull)

# extract the row numbers of the boundary points, in convex order.
indx=hull$arcs[,"end1"]
points <- XY[indx,] # extract the boundary points from XY
points <- rbind(points,points[1,]) # add the closing point
# create the SpatialPolygonsDataFrame
SpP = SpatialPolygons(list(Polygons(list(Polygon(points)),ID="s1")))
plot(SpP)
points(XY)



编辑 响应 OP 提供他们的数据集。
ahull(...)您的数据集似乎在没有警告的情况下失败了 - 它不会产生任何凸包。经过一段时间的实验,看起来问题与 x,y 值的大小有关。如果我将所有内容除以 1000,它就会起作用。不知道这是怎么回事(也许其他人会提供见解??)。无论如何,这是代码和结果:
library(sp)
library(alphahull)
df <- read.csv("ahull problem.csv")
hull <- ahull(df[2:3]/1000,alpha=2)
plot(hull)
# extract the row numbers of the boundary points, in convex order.
indx=hull$arcs[,"end1"]
points <- df[indx,2:3] # extract the boundary points from df
points <- rbind(points,points[1,]) # add the closing point
# create the SpatialPolygonsDataFrame
SpP = SpatialPolygons(list(Polygons(list(Polygon(points)),ID="s1")))
plot(SpP)
points(df[2:3])



另请注意 alpha=2 .设置 alpha=1使用这个数据集实际上生成了 2 个 shell ,一个带有 1 个点,一个带有所有其他点。设置 alpha=2创建 1 个船体。

关于多边形的行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24143052/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com