フィルターのクリア

How can I calculate the number of data points within the area of a cirle

16 ビュー (過去 30 日間)
Matt
Matt 2012 年 10 月 2 日
Basically I need to select a data point within a certain range (which I cant do) then calculate the number of data points within the area of a circle of specific radius (which i have absolutely no idea how to do)
if someone can help me out it would be much appreciated
  1 件のコメント
Star Strider
Star Strider 2012 年 10 月 2 日
You need to be a bit more specific. Assuming that your data are (x,y) pairs:
What is the nature of the data that makes it impossible for you to select data within a certain range? What is the range and what are the data?
Do you know the center of the circle as well as its radius?

サインインしてコメントする。

回答 (5 件)

Image Analyst
Image Analyst 2012 年 10 月 2 日
You can use the first code sample in the FAQ: http://matlab.wikia.com/wiki/FAQ#How_do_I_create_a_circle.3F Just sum circlePixels to sum up the pixels inside the circle.

Babak
Babak 2012 年 10 月 2 日
data = [25 4 -10 -8 20 -5 -15 2 12 22 1000];
range = [-10 10];
% data-range(1)>0
% data-range(2)<0
sum((data-range(1)>0) & (data-range(2)<0))
% gives you the number of elements in data that are in the range
for the case of a circle and the elements in a circle you can use the same strategy but in polar coordinates

Matt
Matt 2012 年 10 月 2 日
I am using variable of type double and they are x,y pairs. I need to select data within a certain range. With this selected data I will pick a specific point, i then want to look at all of the data within the area of a circle around that point..

Babak
Babak 2012 年 10 月 2 日
Here is how you do it for numbers in a circle:
x = [6 -5 -2 3 -1 0 2 1 8 -12 7 6 -6 5 -7 41 3 ];
y = [3 2 -4 -4 -1 77 8 -6 3 -3 3 -9 -12 8 -7 2 -9 ];
center_of_circle=[3 -5];
radius=6;
x0 = x - center_of_circle(1);
y0 = y - center_of_circle(2);
sum(x0.^2+y0.^2-radius^2<0) % gives you the number of elements in the circle

Star Strider
Star Strider 2012 年 10 月 2 日
編集済み: Star Strider 2012 年 10 月 3 日
I'm not claiming this is the most elegant or most efficient way to do it, but here's my solution:
% Generate data ...
XY = (0.5-rand(45,2))*50;
% Select ranges ...
xrange = [-20 20];
yrange = [ -5 45];
% Find data within original ranges ...
xidx = find( (XY(:,1) >= xrange(1)) & (XY(:,1) <= xrange(2)) );
yidx = find( (XY(:,2) >= yrange(1)) & (XY(:,2) <= yrange(2)) );
didx = intersect(xidx,yidx);
% Select a point ...
sampleidx = randi([1 length(didx)]);
% Determine a center & radius ...
circtr = XY(didx(sampleidx),:);
cirrad = 15;
% Calculate radii of all points from center ...
radii = hypot( (XY(:,1)-circtr(1)), (XY(:,2)-circtr(2)) );
% Find the radii <= defined radius
incirc = find( radii <= cirrad);
excirc = setdiff([1:size(XY,1)],incirc);
% Generate table of data within radius ...
data = XY(incirc,:);
% Calculate circle for plot ...
cirx = [(circtr(1)-cirrad) : 0.1 : (circtr(1)+cirrad)];
cirplt = [circtr(1)+cirrad*cos([0:0.025:1]'*2*pi) circtr(2)+cirrad*sin([0:0.025:1]'*2*pi)];
figure(1)
plot( cirplt(:,1), cirplt(:,2), '-b')
hold on
plot( XY(incirc,1), XY(incirc,2), '.r')
plot( XY(excirc,1), XY(excirc,2), '.g')
hold off
axis equal
grid
The number of data within the circle is length(incirc) if that information is also important.

カテゴリ

Help Center および File Exchange2-D and 3-D Plots についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by