internal boundries of 2d shape

5 ビュー (過去 30 日間)
mohamed aboelnasr
mohamed aboelnasr 2020 年 4 月 10 日
回答済み: Image Analyst 2020 年 4 月 10 日
I have a matrix that forms a near 2 concentric circles. I need to mark the internal and the external boundaries of the 2 plots as the obtained data is scattered and the plot is a scatter plot. I was only able to obtain the external boundries through the function boundary

回答 (1 件)

Image Analyst
Image Analyst 2020 年 4 月 10 日
Think about it. There is no internal boundary. You can obtain outer boundary through boundary() or convhull(). Like if you wrapped a rubber band around the points. But for the internal one, if you zoom in you can see that if you want you can extend the boundary into the interior of the mass of points. What you might try is this:
You can find the distance of every point from the origin and sort them in order of increasing distance.
distancesFromOrigin = sqrt(x.^2 + y.^2);
[sortedDistances, sortOrder] = sort(distancesFromOrigin, 'ascend');
Take at least 3 of them (like the 3 closest ones) and fit a circle to them using the FAQ: /FAQ#How_can_I_fit_a_circle_to_a_set_of_XY_data?
xClosest = x(sortOrder(1:3)); % Or however many you want to take.
yClosest = y(sortOrder(1:3));
[xc,yc,R,a] = circfit(xClosest, yClosest)
function [xc,yc,R,a] = circfit(x,y)
%CIRCFIT Fits a circle in x,y plane
%
% [XC, YC, R, A] = CIRCFIT(X,Y)
% Result is center point (yc,xc) and radius R. A is an optional
% output describing the circle's equation:
%
% x^2+y^2+a(1)*x+a(2)*y+a(3)=0
% by Bucher izhak 25/oct/1991
n=length(x); xx=x.*x; yy=y.*y; xy=x.*y;
A=[sum(x) sum(y) n;sum(xy) sum(yy) sum(y);sum(xx) sum(xy) sum(x)];
B=[-sum(xx+yy) ; -sum(xx.*y+yy.*y) ; -sum(xx.*x+xy.*y)];
a=A\B;
xc = -.5*a(1);
yc = -.5*a(2);
R = sqrt((a(1)^2+a(2)^2)/4-a(3));
The 3 closest will give you the smallest circle. Taking more may/will give a larger circle.
Another option is to use alpha shapes, like with activecontour() -- see attached demo.

カテゴリ

Help Center および File ExchangePolar Plots についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by