diff --git a/ShoulderCase/Ellipsoid.m b/ShoulderCase/Ellipsoid.m new file mode 100644 index 0000000..f589838 --- /dev/null +++ b/ShoulderCase/Ellipsoid.m @@ -0,0 +1,43 @@ +classdef Ellipsoid < handle + + properties + polynomial + center + radii + axes + RMSE + end + + methods ( Access = ?Glenoid) + + function obj = Ellipsoid() + obj.polynomial = []; + obj.center = []; + obj.axes = []; + obj.R = []; + end + + function fitTo(obj,points) + obj.polynomial = ellipsoidfit_direct(points(:,1),points(:,2),points(:,3)); + [center,radii,~,R] = ellipsoid_im2ex(obj.p); + obj.center = center'; + obj.radii = radii; + obj.axes = R'; + obj.measureRMSE(points); + end + end + + methods ( Access = private, Hidden = true) + + function measureRMSE(obj,points) + [x,y,p] = ellipsoidfit_residuals(points(:,1),points(:,2),points(:,3),... + obj.center,obj.radii,obj.axes'); + type = 2; + dimension = 2; + residualsEllipsoid = vecnorm((points-[x y z]),type,dimension); + obj.RMSE = norm(residualsEllipsoid)/sqrt(length(residualsEllipsoid)); + end + + end + +end