Home > vbmeg > functions > brain > vb_find_neighbor.m

vb_find_neighbor

PURPOSE ^

find neighbor

SYNOPSIS ^

function [nextID, nextDD] = vb_find_neighbor(Rmax, Pindx, xxF, xxD )

DESCRIPTION ^

 find neighbor
   [nextID, nextDD] = vb_find_neighbor(Rmax, Pindx, xxF, xxD )

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 隣接近傍点リスト( xxF ) とその距離( xxD ) を使って
 皮質に沿って測った距離が指定された半径以内にある点を探索する
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 INPUT
   Rmax    : 最大半径
   Pindx    : 中心点のインデックス
   xxF{i}  : 隣接近傍点インデックス
   xxD{i}  : 隣接近傍点距離
 OUTPUT
   nextID  : 近傍点インデックス
   nextDD    : 近傍点距離

 Made by Masa-aki Sato on 2003/4/28

 Copyright (C) 2011, ATR All Rights Reserved.
 License : New BSD License(see VBMEG_LICENSE.txt)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 アルゴリズム : 最近傍点リストを用いた Tree 探索
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1.自分自身をルートにする
2.各ルート点の隣接近傍点の集合を候補点リストに登録する
3.候補点リストの中でこれまでに試されていない新しい候補点を抽出する
4.出発点から候補点までの累積距離を計算(経路に依存)
5.出発点から候補点までの最短累積距離を求める
6.累積距離が指定半径以内にある点を見つける
7.上記の点を新しいルートにして2.へ戻る
8.指定半径以内にある新しいルートが無くなったときに終了

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function [nextID, nextDD] = vb_find_neighbor(Rmax, Pindx, xxF, xxD )
0002 % find neighbor
0003 %   [nextID, nextDD] = vb_find_neighbor(Rmax, Pindx, xxF, xxD )
0004 %
0005 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0006 % 隣接近傍点リスト( xxF ) とその距離( xxD ) を使って
0007 % 皮質に沿って測った距離が指定された半径以内にある点を探索する
0008 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0009 % INPUT
0010 %   Rmax    : 最大半径
0011 %   Pindx    : 中心点のインデックス
0012 %   xxF{i}  : 隣接近傍点インデックス
0013 %   xxD{i}  : 隣接近傍点距離
0014 % OUTPUT
0015 %   nextID  : 近傍点インデックス
0016 %   nextDD    : 近傍点距離
0017 %
0018 % Made by Masa-aki Sato on 2003/4/28
0019 %
0020 % Copyright (C) 2011, ATR All Rights Reserved.
0021 % License : New BSD License(see VBMEG_LICENSE.txt)
0022 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0023 % アルゴリズム : 最近傍点リストを用いた Tree 探索
0024 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0025 %1.自分自身をルートにする
0026 %2.各ルート点の隣接近傍点の集合を候補点リストに登録する
0027 %3.候補点リストの中でこれまでに試されていない新しい候補点を抽出する
0028 %4.出発点から候補点までの累積距離を計算(経路に依存)
0029 %5.出発点から候補点までの最短累積距離を求める
0030 %6.累積距離が指定半径以内にある点を見つける
0031 %7.上記の点を新しいルートにして2.へ戻る
0032 %8.指定半径以内にある新しいルートが無くなったときに終了
0033 
0034 nextID  = Pindx;     % 近傍点インデックスリスト
0035 nextDD    = 0;        % 近傍点累積距離リスト
0036 rootix    = Pindx;      % ルートのインデックスリスト
0037 rootd    = 0;          % ルートの累積距離リスト
0038 itree    = 0;          % tree number
0039 
0040 while itree==0 | ~isempty(rootix),  
0041     itree     = itree+1;
0042     nroot     = size(rootix,1); % 今回のルート点数
0043     
0044     % 候補点 : 全てのルートの隣接近傍点
0045     ixlist = []; % 隣接近傍点インデックスリスト
0046     ddlist = []; % 隣接近傍点への累積距離リスト
0047     
0048     for i=1:nroot, 
0049         iroot  = rootix(i);    % ルートのインデックス
0050         ixlist = [ixlist; xxF{iroot}];                 % 隣接近傍点インデックス
0051         ddlist = [ddlist; xxD{iroot} + rootd(i) ];    % 隣接近傍点への累積距離
0052     end;
0053     
0054     % 候補点の絞り込み
0055     ixuniq = unique(ixlist);              % 重複インデックスを削除
0056     nextix = vb_setdiff2(ixuniq,nextID);      % 探索済みのインデックスを削除
0057 
0058     % 探索候補点インデックス
0059     nextix = nextix(:);
0060     Nnext  = length(nextix);
0061     nextd  = zeros(Nnext,1);
0062     
0063     for i=1:Nnext,  % Loop of new dipoles
0064         % ixlist の中で nextix(i) に等しいインデックスを抽出
0065         jx = find( nextix(i)==ixlist );
0066         
0067         % nextix(i) への最短累積距離を探す
0068         nextd(i) = min(ddlist(jx)); 
0069     end
0070     
0071     % 最大半径以内の候補点を探す
0072     okix    = find(nextd<Rmax);      % 最大半径以内の候補点を探す
0073     rootix    = nextix(okix);          % 最大半径以内の候補点(次回のルート点)
0074     rootd    = nextd(okix);          % その最短累積距離
0075 
0076     % 近傍点リスト
0077     nextID = [nextID ; rootix ];     % 近傍点リスト
0078     nextDD = [nextDD ; rootd  ];      % 最短累積距離
0079 end

Generated on Mon 22-May-2023 06:53:56 by m2html © 2005