У меня есть матрица 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)
соответствуетвершине и отрезку между " соседними " точками соответствует ребро.Соседние точки (по расстоянию, но не по номеру идентификатора) соединены красными линиями на правой фигуре.
Редактировать. После комментария пользователя 20650 я сопоставил матрицу с неориентированным графом (средний граф)на рисунке).Ненаправленный график выглядит как ожидаемый результат.Но с опцией 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
vetries к графику g
и соответствующие ребра.
Я могу удалить ребро (3,4)
и добавить ребра (3,9)
и (9,4)
и так далее для пар(12, 13)
, (9,10)
и (6,7)
.
Вопрос. Существует ли способ такого отображения?