点が点在する 3D マトリックスがあります (Nx4 マトリックス、xyz データ)。私の目的は、最も近いポイントをリンクし、各チェーンを Kx4 配列 (x、y、z、データ) に登録することです。K はチェーンの長さです。チェーンの総数はポイントによって異なります...特定の点は、これらの線が上向き (z+) にのみ移動することです。同じ z 上のポイントをリンクしたり、下向きにしたりしたくありません。
私はこれまでさまざまな戦略を試してきました.1つは別の配列形状です(Mx4xNz - 基本的に、値はすべて2次元行列ではなく、zごとに積み上げられたことを意味します):[delaunay/nearestneighborを使用して、ある程度の進行後に編集]
- レベル Zn で点をピック
- レベル Zn+1 に移動し、delaunayTriangulation とnearestNeighbor を使用して座標 x、y の範囲内で最も近い点を探します
- ポイントをベクトルに登録する
(Nx4マトリックスでnearestNeighborを使用する他の可能性があると思いますが、検索を上向きに「指示」して連続するポイントをチェーンする方法を考えられません...)
私は次の問題を抱えています:上向きの最近点の発見はうまくいくようですが、一方向のみです!!
リンクが機能しない:
リンク作品:
ループ中に警告が表示されます: 警告: 重複データ ポイントが検出され、削除されました。Triangulation インデックスは、delaunayTriangulation プロパティ X の一意のポイント セットに関して定義されます。
Lign=zeros(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
終わり
なぜこれが起こるのか誰にも考えがありますか?