在Matlab中链接最近点并形成链

在Matlab中链接最近点并形成链,matlab,3d,delaunay,neighbours,closest-points,Matlab,3d,Delaunay,Neighbours,Closest Points,我有一个散乱点的3d矩阵Nx4矩阵,x-y-z-data。我的目标是将最近的点链接在一起,并在Kx4数组中注册每条链x,y,z,data,K是链的长度。链的总数取决于点。。。 一个特殊性是这些线只向上z+,我不想在同一个z上连接点,或者向下 到目前为止,我一直在尝试不同的策略,一种是使用另一种阵列形状Mx4xNz-基本上意味着这些值是按z堆叠的,而不是全部在2d矩阵上: [在取得一些进展后,使用delaunay/nearestneighbor进行编辑] 在标高Zn处选择一个点 转到标高Zn+1,

我有一个散乱点的3d矩阵Nx4矩阵,x-y-z-data。我的目标是将最近的点链接在一起,并在Kx4数组中注册每条链x,y,z,data,K是链的长度。链的总数取决于点。。。 一个特殊性是这些线只向上z+,我不想在同一个z上连接点,或者向下

到目前为止,我一直在尝试不同的策略,一种是使用另一种阵列形状Mx4xNz-基本上意味着这些值是按z堆叠的,而不是全部在2d矩阵上: [在取得一些进展后,使用delaunay/nearestneighbor进行编辑]

在标高Zn处选择一个点 转到标高Zn+1,使用Delaunay三角剖分和nearestNeighbor在坐标x、y范围内查找最近的点 将点注册到向量中 我怀疑在Nx4矩阵中使用近邻还有其他的可能性,但我想不出如何向上“引导”搜索并链接连续点

我发现自己有以下问题: 找到最近的向上点似乎很有效,但仅在1个方向

链接不起作用:

连接工程:

在循环过程中,我得到警告: 警告:检测到并删除了重复的数据点。 三角剖分索引是根据图中唯一的点集定义的 Delaunay三角剖分属性X

Lign=zerosmax_iter,4,s

对于i=1:s

pp_id=i; 

for  n=1:max_iter-1; 

    Wn=W(:,:,n); % W is the data 3d-matrix Mx4xNz
    Wnn=W(:,:,n+1);

    Point_n = Wn(pp_id,:); 

    xn= Point_n(1);
    yn= Point_n(2);
    zn= Point_n(3);
    vn= Point_n(4);

    if xn==0|yn==0|zn==0|vn==0;
        break
    end

    % Look for nearest neighbour at next level
    DT=delaunayTriangulation(Wnn(:,[1:2]));
    [pp_id, d]=nearestNeighbor(DT,[Point_n(1),Point_n(2)]); 

    % limit range
    if d>10 
        break
    end

    % extraction of values at new pp_id 
    Point_n=Wnn(pp_id,:);

    % register point in line
    Lign(n,:,i)=Point_n;

end
结束


有人知道为什么会发生这种情况吗?

您有没有尝试过使用聚类技术?不幸的是,我不熟悉这些。kmeans看起来很有趣,但我不确定在我的例子中如何定义聚类规则,最近邻向上,在一定范围内?这里讨论了多少点?几十、几百、几千?如果它足够小,一个简单的距离矩阵就可以了,不是吗?