最近邻点排序图标

LK COMPONENT DOCS

最近邻点排序

从指定点开始,反复选择离当前点最近的未访问点,并同步输出点坐标和原始序号。

功能概览

该组件按贪心最近邻规则生成一条点访问顺序。它先把起始序号对应的点放在首位,然后在剩余点中选取距当前点最近者,直至每个点恰好输出一次。它不求全局最短路径,不返回回到起点的闭合路线,也不重排输入点本身。距离相同时选原列表索引较小者;重复坐标仍作为不同输入项保留。

以起点为首逐次选择最近未访问点并输出重排点和序号
每次决策只看当前点与未访问点的直线距离;示意输出顺序为 P0、P3、P2、P1。

适用场景

  • 为点位创建便于连续行走或加工的近邻访问次序。
  • 将点序号与点坐标一起输出,供下游同步重排颜色、编号或工艺参数。
  • 按每个数据树分支独立整理点集,再连接后续曲线或路径构造步骤。

工作流程

  1. 连接一个非空点列表,并检查列表中的每个点均有效。
  2. 选择起始点原索引;默认从第 0 项开始,或输入范围内的整数。
  3. 组件逐次寻找离当前点最近的未访问点,完成整个列表。
  4. 将“排序点”与“原序号”按位置配对;下游若重排其他数据,应使用原序号同步取值。

输入

端口是否必需数据与结构默认、匹配与误接说明
点列表(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 计数;原序号是该分支的局部索引,不是整棵树的全局编号。
排序结果会自动闭合吗?
不会。所有输入点输出一次后结束,不会再次附加起点;如需闭合,请单独连接起终点。