Home > vbmeg > functions > brain > vb_mean_normal_vector_1.m

vb_mean_normal_vector_1

PURPOSE ^

xxn : 平均法線方向 = 自分の周りの面の法線方向の平均

SYNOPSIS ^

function xxn = vb_mean_normal_vector_1(Indx,F,V,xx)

DESCRIPTION ^

    xxn     : 平均法線方向 = 自分の周りの面の法線方向の平均

   Indx     : 法線方向を計算するダイポールの頂点番号
  V(n, 1:3) : ダイポールの位置
 xx(n, 1:3) : ダイポールの方向(nx,ny,nz)

 Originaly written by S.Kajihara
 Ver 1.0  modified by M. Sato  2003-3-15

 Copyright (C) 2011, ATR All Rights Reserved.
 License : New BSD License(see VBMEG_LICENSE.txt)

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function    xxn = vb_mean_normal_vector_1(Indx,F,V,xx)
0002 %    xxn     : 平均法線方向 = 自分の周りの面の法線方向の平均
0003 %
0004 %   Indx     : 法線方向を計算するダイポールの頂点番号
0005 %  V(n, 1:3) : ダイポールの位置
0006 % xx(n, 1:3) : ダイポールの方向(nx,ny,nz)
0007 %
0008 % Originaly written by S.Kajihara
0009 % Ver 1.0  modified by M. Sato  2003-3-15
0010 %
0011 % Copyright (C) 2011, ATR All Rights Reserved.
0012 % License : New BSD License(see VBMEG_LICENSE.txt)
0013 
0014 F          = F.F3;
0015 
0016 Npoint      = size(V,1);          % number of dipoles
0017 Npatch      = size(F,1);          % number of patch
0018 xxn       = zeros(Npoint,3);    % Mean normal vector
0019 Flg       = zeros(Npoint,1);    
0020 Flg(Indx) = 1;                    % Flag for dipole index
0021 
0022 xxk       = zeros(1,3);
0023 nnk       = zeros(1,3);
0024 
0025 for i=1:Npatch,
0026     % 3角面の頂点インデックス
0027     k      = F(i,:); 
0028     
0029     if sum( Flg(k) )==0,  continue; end ;
0030     
0031     % 3角面の法線ベクトル
0032     nnk   = cross( V(k(2),:)-V(k(1),:) , V(k(3),:)-V(k(1),:) );
0033 
0034     % Normalization
0035     nnk   = nnk./norm(nnk);        
0036     
0037     % 3角面の法線ベクトル 'nnk' と向きが同じ
0038     % 頂点の法線ベクトル 'xx' の数を数える
0039     xdot  = sum( xx(k,:) .* repmat(nnk ,[3,1]) ,2);
0040     xsign = sum(sign(xdot));
0041     nnk   = sign(xsign)*nnk;
0042 
0043     % 法線の平均
0044     xxn(k,:) = xxn(k,:) + repmat(nnk ,[3,1]);
0045 end
0046 
0047 xxn  = xxn(Indx,:);
0048 xxn2 = sqrt(sum(xxn.^2 , 2));
0049 xxn  = xxn./repmat(xxn2, [1 3]);

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