FITSPHERE Fit a sphere to 3D points using the least squares approach.
SPHERE = fitSphere(PTS)
Fits the equation of a sphere in Cartesian coordinates to the N-by-3
array PTS using the least squares approach. The sphere is represented
by its center [xc yc zc] and its radius r: SPHERE = [xc yc zc r].
SPHERE = fitSphere(X, Y, Z)
Use three vectors X, Y and Z with the length N instead of a the
N-by-3 array PTS.
[SPHERE, RESIDUALS] = fitSphere(...)
Additionally outputs the residuals in the radial direction.
Example:
center=-100 + 200*rand(1,3);
radius = randi([10 100]);
[x,y,z]=drawSphere(center, radius);
x=x+rand(size(x)); y=y+rand(size(y)); z=z+rand(size(z));
sampleIdx = randi(numel(x),[1,randi([4, numel(x)])]);
x=x(sampleIdx); y=y(sampleIdx); z=z(sampleIdx);
sphere = fitSphere(x,y,z);
figure('color','w'); hold on; axis equal tight; view(3)
drawPoint3d(x,y,z)
drawSphere(sphere,'FaceAlpha',0.5)
See also:
createSphere, drawSphere, intersectLineSphere, intersectPlaneSphere
Source:
Levente Hunyadi - Fitting quadratic curves and surfaces:
https://de.mathworks.com/matlabcentral/fileexchange/45356
Package: matgeom