How to plot the best fitted ellipse or circle?
23 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
Image Analyst
2023 年 10 月 25 日
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);
採用された回答
Matt J
2023 年 10 月 25 日
編集済み: Matt J
2023 年 10 月 25 日
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 件のコメント
その他の回答 (3 件)
Torsten
2023 年 10 月 24 日
編集済み: Torsten
2023 年 10 月 24 日
- 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 件のコメント
Les Beckham
2023 年 10 月 25 日
移動済み: Image Analyst
2023 年 10 月 25 日
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 件のコメント
参考
カテゴリ
Help Center および File Exchange で Scatter Plots についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!