我有一个矩阵A
,它定义了一个自相交多边形的有序段:
A <- t(matrix(c(
0, 0 ,
1, 0 ,
1, -2 ,
-2, -2 ,
-2, -1 ,
0, -1 ,
0, -4 ,
-1, -4 ,
-1, -2 ,
2, -2 ,
2, -3 ,
0, -3 ,
0, 0), nrow = 2));
par(mfrow=c(1,3))
plot(A, col='red', type= 'l', xlim=c(min(A[,1]),max(A[,1])),
ylim=c(min(A[,2]),max(A[,2])), xlab='x', ylab='y');
points(A, col='black', pch = 22);
grid()
我注意将矩阵A
映射到无向图,其中点(x,y)
对应于顶点,而“ neighboring ”点之间的线段对应于边。右fugure上的红线连接的相邻点(按距离而不是id的编号)。
编辑。在user20650的注释之后,我已将矩阵映射到无向图(图中的中间图)。无向图看起来像预期的结果。但是,使用edge.curved=TRUE
选项(浅米色),我们可以看到边缘(3,4)
,(6,7)
,(9,10)
和(12, 13)
。
library(igraph)
g <- make_empty_graph(n=nrow(A));
g <- g + path(seq_len(nrow(A)));
plot(as.undirected(g), layout=as.matrix(A))
plot(g, layout=as.matrix(A), edge.curved=TRUE)
边的长度必须等于1。根据条件,我们应该在图5
和相应的边上添加g
面。
对于对(3,4)
,(3,9)
和(9,4)
,我可以删除边缘(12, 13)
并添加边缘(9,10)
和(6,7)
,依此类推。
问题。是否存在这种映射的方法?