0

点が点在する 3D マトリックスがあります (Nx4 マトリックス、xyz データ)。私の目的は、最も近いポイントをリンクし、各チェーンを Kx4 配列 (x、y、z、データ) に登録することです。K はチェーンの長さです。チェーンの総数はポイントによって異なります...特定の点は、これらの線が上向き (z+) にのみ移動することです。同じ z 上のポイントをリンクしたり、下向きにしたりしたくありません。

私はこれまでさまざまな戦略を試してきました.1つは別の配列形状です(Mx4xNz - 基本的に、値はすべて2次元行列ではなく、zごとに積み上げられたことを意味します):[delaunay/nearestneighborを使用して、ある程度の進行後に編集]

  1. レベル Zn で点をピック
  2. レベル Zn+1 に移動し、delaunayTriangulation とnearestNeighbor を使用して座標 x、y の範囲内で最も近い点を探します
  3. ポイントをベクトルに登録する

(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

終わり

なぜこれが起こるのか誰にも考えがありますか?

4

0 に答える 0