从指定点开始,反复选择离当前点最近的未访问点,并同步输出点坐标和原始序号。
功能概览
该组件按贪心最近邻规则生成一条点访问顺序。它先把起始序号对应的点放在首位,然后在剩余点中选取距当前点最近者,直至每个点恰好输出一次。它不求全局最短路径,不返回回到起点的闭合路线,也不重排输入点本身。距离相同时选原列表索引较小者;重复坐标仍作为不同输入项保留。
适用场景
- 为点位创建便于连续行走或加工的近邻访问次序。
- 将点序号与点坐标一起输出,供下游同步重排颜色、编号或工艺参数。
- 按每个数据树分支独立整理点集,再连接后续曲线或路径构造步骤。
工作流程
- 连接一个非空点列表,并检查列表中的每个点均有效。
- 选择起始点原索引;默认从第 0 项开始,或输入范围内的整数。
- 组件逐次寻找离当前点最近的未访问点,完成整个列表。
- 将“排序点”与“原序号”按位置配对;下游若重排其他数据,应使用原序号同步取值。
输入
| 端口 | 是否必需 | 数据与结构 | 默认、匹配与误接说明 |
|---|---|---|---|
| 点列表(P) | 必需 | Point 列表;每个分支单独执行,保留重复点和原始位置。 | 不能为空。任何无效点都会使该次计算报错,不会过滤该项后继续。输入非 Point 类型需要先转换。 |
| 起始序号(i) | 可选 | 一个整数,指定原列表中的起始位置,索引从 0 开始。 | 默认 0;必须满足 0 ≤ i < 点数。每个分支取值按 GH 数据匹配规则匹配;越界时报错。 |
输出
| 端口 | 结果与结构 | 典型下游 |
|---|---|---|
| 排序点(P) | 按最近邻访问顺序输出的 Point 列表;每个输入点恰好保留一次。 | 连接多段线/曲线构造、点标注或依次加工的几何流程。 |
| 原序号(i) | 与排序点逐项对应的零起始整数列表,表示每个输出点在原列表的位置。 | 重排同步属性、编号、颜色或其他平行列表。 |
实际示例
输入点列表为 P0=(0,0)、P1=(10,0)、P2=(8,8)、P3=(1,2),起始序号为 0。组件首先输出 P0,未访问点中 P3 最近,随后 P2 比 P1 更近,最终得到点序列 [P0,P3,P2,P1] 和原序号 [0,3,2,1]。将索引列表接入属性列表选取,可使每个点继续携带其原编号。
如果把起始序号设为 4,但输入只有四个点(有效范围 0–3),组件会报告范围错误;不会自动回绕到首点。若点列表含相同坐标的两项,两项仍分别输出,且按各自原索引参与平局选择。
配合使用
- 可从点参数、曲线采样或几何分析步骤取得点列表;若需要每组单独排序,保持树分支结构。
- 排序点可送入折线或路径构造;原序号输出应同步送入 List Item 等组件重排关联数据。
- 该贪心结果可作快速启发式顺序;需要最优旅行路径、闭合路径或约束路径时,应在下游另行求解。
常见问题与限制
- 结果为什么不是最短的总路径?
- 算法每一步只选当前最近的未访问点,是局部贪心策略,不保证全局最短总长度。
- 为什么不接受空点或无效点?
- 组件要求每个列表项都参与排序;静默丢弃会改变索引语义,因此遇到无效点时停止并报错。
- 分支中的序号从哪里开始?
- 每个输入列表分支各自从 0 计数;原序号是该分支的局部索引,不是整棵树的全局编号。
- 排序结果会自动闭合吗?
- 不会。所有输入点输出一次后结束,不会再次附加起点;如需闭合,请单独连接起终点。