0001 function measureStruct = obtainMeasureInfo(measureName, facetNormalMatrix)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052 if ~exist('facetNormalMatrix', 'var')
0053 facetNormalMatrix = [];
0054 end
0055 if ~exist('measureName', 'var') || isempty(measureName)
0056 measureName = {'volume', ...
0057 'surface', 'facet', 'projection', ...
0058 'feret', 'support'};
0059 end
0060 if ~iscell(measureName)
0061 measureName = {measureName};
0062 end
0063
0064
0065 measureStruct = struct();
0066 for iMeasure = 1:length(measureName)
0067 [thisMeasureStruct functionName] = internalMeasureInfo(measureName{iMeasure});
0068 measureStruct(iMeasure).name = thisMeasureStruct.name;
0069 measureStruct(iMeasure).dim = thisMeasureStruct.dim;
0070 measureStruct(iMeasure).isPar = thisMeasureStruct.isPar;
0071
0072 if ~measureStruct(iMeasure).isPar
0073
0074 measureStruct(iMeasure).handleVrep = @(vrep)(eval(...
0075 [functionName 'Vrep(vrep)']));
0076 measureStruct(iMeasure).handleHrep = @(hrep)(eval(...
0077 [functionName 'Hrep(hrep)']));
0078
0079 if ~isempty(facetNormalMatrix)
0080 measureStruct(iMeasure).handleH = @(h)(...
0081 measureStruct(iMeasure).handleHrep(struct(...
0082 'A', facetNormalMatrix, 'h', h)));
0083 end
0084 else
0085
0086 measureStruct(iMeasure).handleVrep = @(vrep, par)(eval(...
0087 [functionName 'Vrep(vrep, par)']));
0088 measureStruct(iMeasure).handleHrep = @(hrep, par)(eval(...
0089 [functionName 'Hrep(hrep, par)']));
0090
0091 if ~isempty(facetNormalMatrix)
0092 measureStruct(iMeasure).handleH = @(h,par)(...
0093 measureStruct(iMeasure).handleHrep(struct(...
0094 'A', facetNormalMatrix, 'h', h), ...
0095 par));
0096 end
0097 end
0098
0099 end
0100
0101 end
0102
0103 function [measureStruct, functionName] = internalMeasureInfo(measureName)
0104
0105
0106 if strcmp(measureName, 'volume')
0107 measureStruct.name = 'volume';
0108 measureStruct.dim = 3;
0109 measureStruct.isPar = 0;
0110 functionName = 'computeVolume';
0111
0112
0113 elseif strcmpi(measureName, 'surface') || ...
0114 strcmpi(measureName, 'surfaceArea') || strcmp(measureName, 'surface area')
0115
0116 measureStruct.name = 'surface';
0117 measureStruct.dim = 2;
0118 measureStruct.isPar = 0;
0119 functionName = 'computeFacetArea';
0120
0121
0122 elseif strcmpi(measureName, 'facet') || ...
0123 strcmpi(measureName, 'facetarea') || strcmpi(measureName, 'facet area')
0124
0125 measureStruct.name = 'facet';
0126 measureStruct.dim = 2;
0127 measureStruct.isPar = 1;
0128 functionName = 'computeFacetArea';
0129
0130
0131 elseif strcmpi(measureName, 'projection') || ...
0132 strcmpi(measureName, 'projectionArea') || strcmpi(measureName, 'projection area')
0133
0134 measureStruct.name = 'projection';
0135 measureStruct.dim = 2;
0136 measureStruct.isPar = 1;
0137 functionName = 'computeProjectionArea';
0138
0139
0140 elseif strcmpi(measureName, 'feret') || strcmpi(measureName, 'feret diameter')
0141
0142 measureStruct.name = 'feret';
0143 measureStruct.dim = 1;
0144 measureStruct.isPar = 1;
0145 functionName = 'computeFeret';
0146
0147
0148 elseif strcmpi(measureName, 'support') || strcmpi(measureName, 'support value')
0149 measureStruct.name = 'support';
0150 measureStruct.dim = 1;
0151 measureStruct.isPar = 1;
0152 functionName = 'computeSupportValue';
0153
0154
0155 elseif strcmpi(measureName, 'meanWidth') || strcmpi(measureName, 'mean width')
0156 measureStruct.name = 'meanWidth';
0157 measureStruct.dim = 1;
0158 measureStruct.isPar = 0;
0159 functionName = 'computeMeanWidth';
0160
0161 elseif strcmpi(measureName, 'edgeLength') || strcmpi(measureName, 'edge length')
0162 measureStruct.name = 'edgeLength';
0163 measureStruct.dim = 1;
0164 measureStruct.isPar = 1;
0165 functionName = 'computeEdgeLength';
0166 else
0167
0168 error('elk:polytope:wrongInput', ...
0169 ['Given measure ''' measureName ''' is unknown']);
0170 end
0171
0172 end