0

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

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

  1. 在 Zn 水平上选择一个点
  2. 转到 Zn+1 级,使用 delaunayTriangulation 和nearestNeighbor 查找坐标 x,y 范围内的最近点
  3. 将点注册到向量中

(我怀疑使用nearestNeighbor 和Nx4 矩阵还有其他可能性,但我想不出如何向上“引导”搜索并将连续点链接起来......)

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

链接不起作用:

链接不起作用

联动作品:

链接作品

在循环期间,我收到警告:警告:已检测到并删除了重复的数据点。三角测量索引是根据 delaunayTriangulation 属性 X 中的唯一点集定义的。

木质素=零(max_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

结尾

任何人都知道为什么会发生这种情况?

4

0 回答 0