R 多边形边的排序 让我们考虑非自相交多边形的顶点。 1.(x_1,y_1) 2.(x_2,y_2),…,6.(x_6,y_6)

R 多边形边的排序 让我们考虑非自相交多边形的顶点。 1.(x_1,y_1) 2.(x_2,y_2),…,6.(x_6,y_6),r,algorithm,sorting,computational-geometry,R,Algorithm,Sorting,Computational Geometry,我们也给出了阵列中形成多边形边的成对点。 数组是{(1,4),(2,6),(2,5),(4,3),(6,1),(3,5)}。请注意,此边不连续且(x,y)=(y,x) 我需要一个算法来获得$(1,4),(4,3),(3,5),(5,2),(2,6),(6,1)$类型的数组,这样我就可以逐个获得连续的边 感谢您的帮助。您似乎正在处理类似图形的数据,因此,igraph包可能会有所帮助 points<-rbind(c(1,4),c(2,6),c(2,5),c(4,3),c(6,1),c(3,5)

我们也给出了阵列中形成多边形边的成对点。 数组是{(1,4),(2,6),(2,5),(4,3),(6,1),(3,5)}。请注意,此边不连续且(x,y)=(y,x)

我需要一个算法来获得$(1,4),(4,3),(3,5),(5,2),(2,6),(6,1)$类型的数组,这样我就可以逐个获得连续的边


感谢您的帮助。

您似乎正在处理类似图形的数据,因此,
igraph
包可能会有所帮助

points<-rbind(c(1,4),c(2,6),c(2,5),c(4,3),c(6,1),c(3,5))

library(igraph)
plot(minimum.spanning.tree(graph.edgelist(points)))

点您没有为多边形坐标提供数据结构,因此我假设它们存储在
data.frame

数据

d <- data.frame(from = c(1, 2, 2, 4, 6, 3), to = c(4, 6, 5, 3, 1, 5))

d扫描边缘列表并填充两个数组:在索引
i
处,存储链接到顶点
i
的两个顶点的索引,让
p[N]
q[N]
(初始化
p
q
,保留值表示“未知”)。这需要线性时间

然后从
(i,j):=(1,p[1])
开始,找到下一条边:如果
p[j]==i
,则
(j,q[j])
否则
(j,p[j])
。重复此操作,直到j==1
。这也需要线性时间

就你而言:

1 -> 4, 6
2 -> 6, 5
3 -> 4, 5
4 -> 1, 3
5 -> 3, 2
6 -> 2, 1

循环是
1,4,3,5,2,6

是的,我正在处理类似图形的数据。从数据来看,2和5似乎是连接节点,但这张图没有显示该连接。你能解释一下我们缺少了什么吗?我创建了一个最小生成树,这样你就失去了循环性(就像你的例子一样)。如果您想保留这一方面,只需使用
plot(graph.edgelist(points))
我知道了。谢谢你的帮助和建议。回答得很好。这是有效的,解释非常清楚。非常感谢。不客气。如果答案也符合你的需要,你能接受吗?对不起,打勾太晚了。事实上我不知道这个记号。无论如何,再次谢谢你。
1 -> 4, 6
2 -> 6, 5
3 -> 4, 5
4 -> 1, 3
5 -> 3, 2
6 -> 2, 1