normal vector assigned for vertex xxn = vb_vertex_normal(V,F,xxf) --- Input V : vertex of surface F : triangle patch index xxf : normal vector of triangle --- Output xxn : normal vector assigned for vertex Ver 1.0 by M. Sato 2004-2-10 三角面の法線と頂点法線計算 V(n, 1:3) : 頂点の位置 F(j, 1:3) : 三角面3頂点のインデックス xxf : 3角面の法線ベクトル xxn : 頂点法線 = 頂点に隣接する三角面法線の平均 Copyright (C) 2011, ATR All Rights Reserved. License : New BSD License(see VBMEG_LICENSE.txt)
0001 function xxn = vb_vertex_normal(V,F,xxf) 0002 % normal vector assigned for vertex 0003 % xxn = vb_vertex_normal(V,F,xxf) 0004 % 0005 % --- Input 0006 % V : vertex of surface 0007 % F : triangle patch index 0008 % xxf : normal vector of triangle 0009 % --- Output 0010 % xxn : normal vector assigned for vertex 0011 % 0012 % Ver 1.0 by M. Sato 2004-2-10 0013 % 0014 % 三角面の法線と頂点法線計算 0015 % V(n, 1:3) : 頂点の位置 0016 % F(j, 1:3) : 三角面3頂点のインデックス 0017 % xxf : 3角面の法線ベクトル 0018 % xxn : 頂点法線 = 頂点に隣接する三角面法線の平均 0019 % 0020 % Copyright (C) 2011, ATR All Rights Reserved. 0021 % License : New BSD License(see VBMEG_LICENSE.txt) 0022 0023 Npoint = size(V,1); % 頂点数 0024 Npatch = size(F,1); 0025 0026 % 頂点法線 = 頂点に隣接する三角面法線の平均 0027 xxn = zeros(Npoint,3); 0028 0029 for n=1:Npatch, 0030 % 三角面3頂点インデックス 0031 j1=F(n,1); 0032 j2=F(n,2); 0033 j3=F(n,3); 0034 0035 xxn(j1,:) = xxn(j1,:) + xxf(n,:); 0036 xxn(j2,:) = xxn(j2,:) + xxf(n,:); 0037 xxn(j3,:) = xxn(j3,:) + xxf(n,:); 0038 end; 0039 0040 % 法線の正規化 0041 xxs = sqrt(sum(xxn.^2,2)); 0042 xxs = max(xxs,eps); 0043 xxn = xxn./xxs(:,ones(1,3));