Search next-point index and distance [xxD, xxF, xxT, xxN] = vb_next_distance(F,V) xxD{n} : 頂点 n と 隣接近傍点 との 距離 xxF{n} : 頂点 n の 隣接近傍頂点番号 xxT{n} : 頂点 n の 隣接3角面番号 xxN(n) : 頂点 n の 隣接近傍頂点数 M. Sato 2003-3-15 M. Sato 2017-3-10 Copyright (C) 2011, ATR All Rights Reserved. License : New BSD License(see VBMEG_LICENSE.txt)
0001 function [xxD, xxF, xxT, xxN] = vb_next_distance(F,V) 0002 % Search next-point index and distance 0003 % [xxD, xxF, xxT, xxN] = vb_next_distance(F,V) 0004 % 0005 % xxD{n} : 頂点 n と 隣接近傍点 との 距離 0006 % xxF{n} : 頂点 n の 隣接近傍頂点番号 0007 % xxT{n} : 頂点 n の 隣接3角面番号 0008 % xxN(n) : 頂点 n の 隣接近傍頂点数 0009 % 0010 % 0011 % M. Sato 2003-3-15 0012 % M. Sato 2017-3-10 0013 % 0014 % Copyright (C) 2011, ATR All Rights Reserved. 0015 % License : New BSD License(see VBMEG_LICENSE.txt) 0016 0017 Npoint = size(V,1); % number of dipoles 0018 Npatch = size(F,1); % number of patch 0019 xxD = cell(Npoint,1); 0020 xxF = cell(Npoint,1); 0021 xxT = cell(Npoint,1); 0022 xxN = zeros(Npoint,1); 0023 0024 % 3角面に関するループ 0025 for j=1:Npatch, 0026 % 3角面の頂点インデックス 0027 k = F(j,:); 0028 0029 % 各頂点の近傍点リストに他の頂点を加える 0030 xxF{k(1)} = [ xxF{k(1)} ; k(2) ; k(3)]; 0031 xxF{k(2)} = [ xxF{k(2)} ; k(3) ; k(1)]; 0032 xxF{k(3)} = [ xxF{k(3)} ; k(1) ; k(2)]; 0033 0034 % 各頂点の3角面リストに3角面番号を加える 0035 xxT{k(1)} = [ xxT{k(1)} ; j ]; 0036 xxT{k(2)} = [ xxT{k(2)} ; j ]; 0037 xxT{k(3)} = [ xxT{k(3)} ; j ]; 0038 end; 0039 0040 for i=1:Npoint, 0041 % 近傍点リストの重複を除く 0042 nextix = unique(xxF{i}); 0043 xxF{i} = nextix; 0044 xxN(i) = length(nextix); 0045 0046 Va = V(i,:); 0047 Vb = V(nextix,:); 0048 0049 % Distance from vertex i to next points xxF{i} 0050 %dd = (Va(1)-Vb(:,1)).^2 +(Va(2)-Vb(:,2)).^2 +(Va(3)-Vb(:,3)).^2 ; 0051 dd = sum(vb_repadd(Vb, -Va).^2, 2); 0052 xxD{i} = sqrt(dd); 0053 end