首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在循环中使用convex_hull()函数?

如何在循环中使用convex_hull()函数?
EN

Stack Overflow用户
提问于 2022-11-09 10:38:55
回答 1查看 24关注 0票数 0

在我的previous question中,我使用了convex_hull()函数。我们有一个图,其中所有的节点都有零度和(x,y)坐标。我们需要创建图作为凸壳的序列。如果只有一个节点有零度,我们就可以停止循环。

我的尝试是:

代码语言:javascript
复制
library(igraph)
######################################################################
set.seed(5)
n=15
g  <- graph.empty(n)
xy <- cbind(runif(n), runif(n))
in_points <- V(g)[degree(g)==0]

repeat {
cp <- convex_hull(xy[in_points, ])$resverts+1

g <- as.undirected(add_edges(g, c(t(embed(cp, 2)), cp[1], cp[length(cp)])))

in_points <- V(g)[degree(g)==0]
if (length(in_points)=1) {break}
}

plot(g, vertex.size=10, layout=xy)

可以在重复循环中看到节点3使用了两次。

预期结果是:

问题:如何正确地使用convex_hull()函数的输出来在循环中连续添加边?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-09 12:58:20

您可以迭代地使用chulladd_edges。您只需要确保输入到add_edges的格式是正确的,并跟踪哪些节点尚未成为外部凸壳的一部分。

代码语言:javascript
复制
xy <- cbind(seq_len(n), xy)

while(nrow(xy) > 1){
  current_hull <- chull(xy[,2], xy[,3])
  current_hull <- c(current_hull, current_hull[[1]])
  g <- add_edges(g, as.vector(t(embed(xy[,1][current_hull], 2)[,2:1])))
  xy <- xy[-current_hull,,drop = FALSE]
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74373494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档