How to plot the best fitted ellipse or circle?
    14 views (last 30 days)
  
       Show older comments
    
Hi all, 
I have a data set (attached here) that has two arrays. I want to plot them in a polar graph and want to find out the best fitted a) ellipse, and b) circle. 
x(:,1) is the x and x(:,2) is the y for the plot. 
If anyone can help me out here, I will be very grateful. 
xy = load("EllipseData.mat");
x = xy.x(:,1);
y = xy.x(:,2);
plot(x,y,'o')
axis equal
5 Comments
  Image Analyst
      
      
 on 25 Oct 2023
				I see you accepted @Matt J's answer.  You can adjust/control the approximate number of points within the ellipse by changing the 0.95 in this line of code:
b=boundary(XY,0.95);
Accepted Answer
  Matt J
      
      
 on 25 Oct 2023
        
      Edited: Matt J
      
      
 on 25 Oct 2023
  
      The code below uses ellipsoidalFit() from this FEX download,
Is this the kind of thing you are looking for?
xy=load('EllipseData.mat').x;
p=prunecloud(xy);
I=all(~isnan(p.Vertices),2);
e=ellipticalFit(p.Vertices(I,:)');
%Display -- EDITED
XY=e.sample(linspace(0,360,1000));
[t,r]=cart2pol(xy(:,1),xy(:,2));
[T,R]=cart2pol(XY{:});
polarplot(t,r,'ob',T,R,'r-')
function [p,XY]=prunecloud(xy)
    for i=1:3
      D2=max(pdist2(xy,xy,'euclidean','Smallest', 10),[],1);
      xy(D2>0.1,:)=[];
    end
 XY=xy;
 b=boundary(XY,0.95);
 p=polyshape(XY(b,:));
end
4 Comments
More Answers (3)
  Torsten
      
      
 on 24 Oct 2023
        
      Edited: Torsten
      
      
 on 24 Oct 2023
  
      - Compute the center of gravity of the point cloud. Call it (x',y').
- Compute the point of your point cloud with the greatest distance to (x',y'). Call the distance R.
- Define the circle that encloses the point cloud by (x-x')^2 + (y-y')^2 = R^2.
6 Comments
  Les Beckham
      
 on 25 Oct 2023
        
      Moved: Image Analyst
      
      
 on 25 Oct 2023
  
      xy     = load("EllipseData.mat");
x      = xy.x(:,1);
y      = xy.x(:,2);
rho    = sqrt(x.^2 + y.^2);
theta  = atan2(y,x); % <<< use 4 quadrant atan2
polarplot(theta, rho, '.', 'markersize', 3, 'Color', '#aa4488')
0 Comments
See Also
Categories
				Find more on Scatter Plots in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!









