0001 function areas = meshFaceAreas(vertices, faces)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021 if isnumeric(faces)
0022
0023 nf = size(faces, 1);
0024 areas = zeros(nf, 1);
0025 if size(vertices, 2) == 2
0026
0027 for f = 1:nf
0028 areas(f,:) = polygonArea(vertices(faces(f,:), :));
0029 end
0030 else
0031
0032 if size(faces, 2) == 3
0033
0034 v1 = vertices(faces(:,1), :);
0035 v12 = vertices(faces(:,2), :) - v1;
0036 v13 = vertices(faces(:,3), :) - v1;
0037 areas = vectorNorm3d(crossProduct3d(v12, v13))/2;
0038
0039 else
0040
0041 for f = 1:nf
0042 areas(f) = polygonArea3d(vertices(faces(f,:), :));
0043 end
0044 end
0045 end
0046
0047 else
0048
0049 nf = length(faces);
0050 areas = zeros(nf, 1);
0051 if size(vertices, 2) == 2
0052
0053 for f = 1:nf
0054 areas(f) = polygonArea(vertices(faces{f}, :));
0055 end
0056 else
0057
0058 for f = 1:nf
0059 areas(f) = polygonArea3d(vertices(faces{f}, :));
0060 end
0061 end
0062 end
0063