TETRAHEDRONVOLUME Signed volume of a tetrahedron. VOL = tetrahedronVolume(TETRA) Comptues the siged volume of the tetrahedron TETRA defined by a 4-by-4 array representing the polyhedron vertices. Example vi = [0 0 0;1 0 0;0 1 0;0 0 1]; tetrahedronVolume(vi) ans = 0.1667 [V F] = createTetrahedron; tetrahedronVolume(V) ans = -.3333 See also meshes3d, createTetrahedron, meshVolume ------ Author: David Legland e-mail: david.legland@grignon.inra.fr Created: 2012-04-05, using Matlab 7.9.0.529 (R2009b) Copyright 2012 INRA - Cepia Software Platform.
0001 function vol = tetrahedronVolume(vertices, varargin) 0002 %TETRAHEDRONVOLUME Signed volume of a tetrahedron. 0003 % 0004 % VOL = tetrahedronVolume(TETRA) 0005 % Comptues the siged volume of the tetrahedron TETRA defined by a 4-by-4 0006 % array representing the polyhedron vertices. 0007 % 0008 % Example 0009 % vi = [0 0 0;1 0 0;0 1 0;0 0 1]; 0010 % tetrahedronVolume(vi) 0011 % ans = 0012 % 0.1667 0013 % 0014 % [V F] = createTetrahedron; 0015 % tetrahedronVolume(V) 0016 % ans = 0017 % -.3333 0018 % 0019 % See also 0020 % meshes3d, createTetrahedron, meshVolume 0021 % 0022 % ------ 0023 % Author: David Legland 0024 % e-mail: david.legland@grignon.inra.fr 0025 % Created: 2012-04-05, using Matlab 7.9.0.529 (R2009b) 0026 % Copyright 2012 INRA - Cepia Software Platform. 0027 0028 if nargin == 2 0029 tetras = varargin{1}; 0030 nTetras = size(tetras, 1); 0031 vol = zeros(nTetras, 1); 0032 for i = 1:nTetras 0033 tetra = tetras(i,:); 0034 vol(i) = det(bsxfun(@minus, vertices(tetra(2:4),:), vertices(tetra(1),:))) / 6; 0035 end 0036 return; 0037 end 0038 0039 % control on inputs 0040 if nargin == 4 0041 vertices = [vertices ; varargin{1} ; varargin{2} ; varargin{3}]; 0042 end 0043 0044 if size(vertices, 1) < 4 0045 error('Input vertex array requires at least 4 vertices'); 0046 end 0047 0048 % compute volume of tetrahedron, using first vertex as origin 0049 vol = det(vertices(2:4,:) - vertices([1 1 1],:)) / 6;