R 多边形边的排序 让我们考虑非自相交多边形的顶点。 1.(x_1,y_1) 2.(x_2,y_2),…,6.(x_6,y_6)
我们也给出了阵列中形成多边形边的成对点。 数组是{(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)$类型的数组,这样我就可以逐个获得连续的边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)
感谢您的帮助。您似乎正在处理类似图形的数据,因此,
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