I am unable to understand this metrics code completely please help

조회 수: 3 (최근 30일)
THE GUY WITH WORK TO DO
THE GUY WITH WORK TO DO 2022년 9월 30일
답변: Santosh Fatale 2022년 10월 3일
classdef metrics
%metrics
% The metrics class stores and evaluates various properties using other
% classes within the TPMS Designer package
%
% Methods:
% M = metrics(); - create and returns an empty metrics object 'M'
%
% M = fvMetrics(FV); - calculate and updates metrics based on the
% properties of a surfaceMesh FV
%
% M = mechanicalMetrics(F); - calcualte the mechanical metrics
% from a field-based representation "F" - (requires homogenisation).
%
% out = export(); - export the metrics as a classless
% data structure
%
% Properties
% Mechanical Properties/Moduli:
% elastic, poisson, shear, zenerRatio, bulk, total
% Physical Properties:
% volume, volumeFraction, surfaceArea, rmsMC, areaBelow30deg
% L-LBF Properties
% LpbfSimple, LpbfRa_Max, LpbfError_Mean, LpbfError_Max
% General Properties
% CPUtime, errorFlag
%
% TPMS Design Package metrics class
% Created by Alistair Jones, RMIT University 2021.
properties
CPUtime
Nfaces
Nnodes
volume
volumeFraction
surfaceArea
relativeArea
rmsMC
rmsGC
thickness
poreDiameter
areaVar
areaMean
areaStd
areaMin
areaMax
elastic
poisson
shear
totalStiffness
zenerRatio
errorFlag
end
methods
function M = metrics()
%Constructor
if nargin==0
return;
end
end
function M = fvMetrics(M,FV)
% Function to calculate metrics based on properties of a surfaceMesh.
M.surfaceArea = FV.totalArea;
M.volume = abs(FV.totalVolume);
M.Nfaces = size(FV.faces,1);
M.Nnodes = size(FV.vertices,1);
try
M.errorFlag = 0;
if isfield(FV.Vproperty,'MC')
M.rmsMC = rms(FV.Vproperty.MC);
M.rmsGC = rms(FV.Vproperty.GC);
end
catch
M.errorFlag = 1;
end
end
function M = mechanicalMetrics(M,F)
% Function to calculate the basic mechanical metrics
[sx, sy, sz] = size(F.property.solid);
M.volumeFraction = sum(F.property.solid(1:sx-1,1:sy-1,1:sz-1),'all')/((sx-1)*(sy-1)*(sz-1));
if ~isempty(F.CH)
S = inv(F.CH);
E = zeros(6,1);
E(1) = 1/S(1,1);
E(2) = 1/S(2,2);
E(3) = 1/S(3,3);
E(4) = 1/S(4,4);
E(5) = 1/S(5,5);
E(6) = 1/S(6,6);
M.elastic = E(1);
M.shear = mean(E(4:6));
M.poisson = -S(1,2)*E(1);
M.totalStiffness = M.elastic+2*M.shear*(1-M.poisson);
M.zenerRatio = 2*(1+M.poisson)*M.shear/M.elastic;%2*F.CH(4,4)/(F.CH(1,1)-F.CH(1,2));
end
M.areaMean = mean(F.zSlices.area);
M.areaStd = std(F.zSlices.area);
M.areaVar = var(F.zSlices.area);
M.areaMin = min(F.zSlices.area,[],'all');
M.areaMax = max(F.zSlices.area,[],'all');
M.thickness = mean(F.zSlices.thickness);
temp = bwdist(padarray(F.property.solid,F.res,'circular'));
M.poreDiameter = (F.xq(2)-F.xq(1))*max(temp,[],'all');
end
function out = export(M)
temp = string(fieldnames(M));
for i = 1:length(temp)
if isempty(M.(temp(i)))
out.(temp(i)) = NaN;
else
out.(temp(i)) = M.(temp(i));
end
end
end
end
end
  댓글 수: 1
Walter Roberson
Walter Roberson 2022년 9월 30일
We have no idea what parts of it you presently understand, or which parts of it you are interested in. It could take us many months to write up explanations for everything about the file that you might possibly be interested in.

댓글을 달려면 로그인하십시오.

답변 (1개)

Santosh Fatale
Santosh Fatale 2022년 10월 3일
Hi Sripathi,
The above code can be considered as an example of “Object Oriented Programming” using MATLAB.
As a first step, you can check out the link below on “Introduction to Object Oriented Programming in MATLAB”.

카테고리

Help CenterFile Exchange에서 Point Cloud Processing에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by