我有一个带有散点的 3d 矩阵(Nx4 矩阵,xyz 数据)。我的目标是将最近的点链接在一起,并将每个链注册在一个 Kx4 数组(x,y,z,数据)中,K 是链的长度。链的总数取决于点......一个特殊性是这些线只向上(z +),我不想在同一个z上链接点,或者向下。
到目前为止,我一直在尝试不同的策略,一种是使用另一种数组形状(Mx4xNz - 基本上意味着这些值是按 z 堆叠的,而不是全部在 2d 矩阵上):[在取得一些进展后进行编辑,使用 delaunay/nearestneighbor]
- 在 Zn 水平上选择一个点
- 转到 Zn+1 级,使用 delaunayTriangulation 和nearestNeighbor 查找坐标 x,y 范围内的最近点
- 将点注册到向量中
(我怀疑使用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
结尾
任何人都知道为什么会发生这种情况?