-
Notifications
You must be signed in to change notification settings - Fork 6
/
getCentreOfMass.m
71 lines (66 loc) · 1.99 KB
/
getCentreOfMass.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
function C = getCentreOfMass( userdata, varargin )
% GETCENTREOFMASS Returns the centre of mass of the anatomical model
% defined in userdata
%
% Usage:
% C = getCentreOfMass( userdata, varargin )
% Where:
% userdata - see importcarto_mem
% C - the Cartesian co-ordinates of the centre of mass
%
% GETCENTREOFMASS accepts the following parameter-value pairs
% 'plot' {false}|true
%
% GETCENTREOFMASS calculates the centre of mass of the userdata by
% accessing a closed surface via the OpenEP function getClosedSurface.m
% before using centroidOfPolyhedron.m to calculate the centre of mass. The
% function centroidOfPolyhedron.m was written by Isfandiyar RASHIDZADE,
% available through the Mathworks FileExchange:
% https://www.mathworks.com/matlabcentral/fileexchange/63614-centroid-of-triangulated-polyhedron
%
% Author: Steven Williams (2020) (Copyright)
% SPDX-License-Identifier: Apache-2.0
%
% Modifications -
%
% See also FREEBOUNDARYPOINTS, GETANATOMICALSTRUCTURES
%
% Info on Code Testing:
% ---------------------------------------------------------------
% C = getCentreOfMass( userdata, 'plot', true )
% ---------------------------------------------------------------
%
% ---------------------------------------------------------------
% code
% ---------------------------------------------------------------
% parse input
nStandardArgs = 1; % UPDATE VALUE
plot = false;
if nargin > nStandardArgs
for i = 1:2:nargin-nStandardArgs
switch varargin{i}
case 'plot'
plot = varargin{i+1};
end
end
end
% get a trirep
trMesh = getClosedSurface(userdata);
% get all the co-ordinates
C = centroidOfPolyhedron(trMesh.X, trMesh.Triangulation);
% plot
if plot
figure
hS = trisurf(trMesh);
set(hS ...
, 'facecolor', [.5 .5 .5] ...
, 'edgecolor', 'none' ...
, 'facealpha', .2 ...
);
set(gcf, 'color', 'w' ...
);
axis off equal vis3d;
hold on;
plotsphere(C(1), C(2), C(3), 'r', 5, 16);
end
end