I know the coordinates of several scattered points in space, how can I fit them to a sphere?

3 views (last 30 days)
I already know the coordinates (x,y,z) of several scattered points on a sphere in space, and my goal is to fit a sphere and get the radius. I think I just need to bring their coordinates into the code I found. I would like to ask how to bring in the coordinates of these points?
function [r,a,b,c] = sphereFit(data)
xx = data(:,1);
yy = data(:,2);
zz = data(:,3);
AA = [-2*xx, -2*yy , -2*zz , ones(size(xx))];
BB = [ -(xx.^2+yy.^2+zz.^2)];
YY = mldivide(AA,BB); %Trying to solve AA*YY = BB
a = YY(1);
b = YY(2);
c = YY(3);
D = YY(4); % D^2 = a^2 + b^2 + c^2 -r^2(where a,b,c are centers)
r = sqrt((a^2+b^2+c^2)-D);
The second code:
function [Center,Radius] = sphereFit(X)
A=[mean(X(:,1).*(X(:,1)-mean(X(:,1)))), ...
2*mean(X(:,1).*(X(:,2)-mean(X(:,2)))), ...
2*mean(X(:,1).*(X(:,3)-mean(X(:,3)))); ...
0, ...
mean(X(:,2).*(X(:,2)-mean(X(:,2)))), ...
2*mean(X(:,2).*(X(:,3)-mean(X(:,3)))); ...
0, ...
0, ...
mean(X(:,3).*(X(:,3)-mean(X(:,3))))];
A=A+A.';
B=[mean((X(:,1).^2+X(:,2).^2+X(:,3).^2).*(X(:,1)-mean(X(:,1))));...
mean((X(:,1).^2+X(:,2).^2+X(:,3).^2).*(X(:,2)-mean(X(:,2))));...
mean((X(:,1).^2+X(:,2).^2+X(:,3).^2).*(X(:,3)-mean(X(:,3))))];
Center=(A\B).';
Radius=sqrt(mean(sum([X(:,1)-Center(1),X(:,2)-Center(2),X(:,3)-Center(3)].^2,2)));
Which code should I choose and apply correctly?
  2 Comments
Sterne_17
Sterne_17 on 4 Feb 2023
Sir. Thank you! The code you suggested to me is very, very well written! I just wasn't sure how to go about using it, so I replied to you to ask you about bringing a series of scattered coordinates into the code you wrote. I'm a starter and don't have any experience writing code, that's why I asked you and it has nothing to do with the type of question, I'm also just using the forum to ask questions. I meant no disrespect and I just adopted your answer. I just wanted to ask how to bring these scattered coordinates into the code, because I don't understand it and I can't tell if the code is good or bad. In this question I attached the code I don't understand either, I just want to ask how to bring the scatter coordinates into your code.

Sign in to comment.

Accepted Answer

Image Analyst
Image Analyst on 4 Feb 2023
Edited: Image Analyst on 4 Feb 2023
It looks like the input data for both functions is an N-by-3 matrix.

More Answers (0)

Tags

Community Treasure Hunt

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

Start Hunting!