You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于K个顶点生成仅含外围边的cycle graph的算法咨询

基于K个顶点生成仅含外围边的cycle graph的算法咨询

嘿,看起来你要找的其实就是环图(Cycle Graph)或者几何意义上的凸包边集的生成方法呀!之前没找到合适的方案大概率是术语没对上,我给你梳理两种最实用的思路:

一、直接生成目标边集(最高效)

这种方法不用先搞完全图,直接一步到位生成外围边:

  • 如果你的顶点已经按外围顺序排列(比如顺时针/逆时针的坐标顺序,或者正多边形的顶点顺序):
    直接把第i个顶点和第i+1个顶点相连,最后把第K个顶点连回第1个顶点就行。比如顶点列表是v0, v1, ..., vK-1,生成的边就是(v0,v1), (v1,v2), ..., (vK-1,v0),这就是标准的环图结构。
  • 如果顶点是随机分布的,没有排序:
    先给顶点做凸包计算——你说的“外围边”本质就是这些顶点构成的凸包的边。常用的凸包算法有Graham扫描法、Andrew算法,它们能帮你把顶点按凸包的外围顺序排列好,之后再按上面的方式连接相邻顶点即可。

二、从已有的完全图中筛选外围边

如果你已经生成了完全图,想删掉内部边保留外围边,可以通过以下规则判断:
对于完全图中的任意一条边(u, v),检查剩下的所有顶点是否都在这条边的同一侧:

  • 如果所有顶点都在边的同侧,这条边就是外围(凸包)边,保留;
  • 如果有顶点分布在边的两侧,这条边就是内部边,可以删除。

判断点在边的哪一侧可以用向量叉积实现:假设边是从u到v,取任意其他顶点p,计算叉积(v.x - u.x) * (p.y - u.y) - (v.y - u.y) * (p.x - u.x)。如果所有顶点的叉积结果符号一致(全正或全负,取决于坐标系的y轴方向),就说明这条边是凸包边。

小提示

  • 如果你的需求是生成规整的正多边形外围(比如顶点均匀分布在圆上),可以直接按角度生成每个顶点的坐标,然后依次相连,连凸包计算都省了。
  • 术语补充:你要的“仅含外围边的图”,如果是所有顶点都在环上,就是环图(Cycle Graph,记为Cₖ);如果是几何空间中的外围边界,就是凸包边集。

备注:内容来源于stack exchange,提问作者anon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 12:52:34