data pick by given geometry

1 view (last 30 days)
Yu Li
Yu Li on 4 Apr 2019
Commented: Image Analyst on 8 Apr 2019
I have a set of scatter data, I want to do someting like below:
  1. use a given coordinate in the x-y system as input
  2. use this coordinate as center, draw a circle in this figure with given radius
  3. find the points inside this circle
is there anyway to do this in Matlab?
I attached a set of test data, below is the test code to reproduce a similiar figure like before:
load test
f=figure(1);
f.Units='pixels';
scatter(test(:,1),test(:,2));
f.Position(4)=f.Position(4)*0.5;
Thanks!
Yu

Answers (2)

Image Analyst
Image Analyst on 5 Apr 2019
Get the indexes with distances less than R then extract the corresponding x and y coordinates.
x = test(:,1);
y = test(:,2);
plot(x, y, 'b.', 'MarkerSize', 18)
uiwait(msgbox('Locate circle center'));
[xCenter, yCenter] = ginput(1)
distances = sqrt((x-xCenter).^2 + (y-yCenter).^2);
indexes = distances <= R;
xInside = x(indexes);
yInside = y(indexes);
  4 Comments
Walter Roberson
Walter Roberson on 8 Apr 2019
I am confused about which coordinate system the circle needs to be in ? Does the circle need to be in X Y (data) coordinates? Does the circle need to be in screen coordinates?
Image Analyst
Image Analyst on 8 Apr 2019
If you have the Image Processing Toolbox, you can use drawfreehand() to lassoo points. The function works on graphs also (in addition to images of course).
% Draw data
x = rand(100,1);
y = rand(length(x), 1);
scatter(x, y);
grid on;
% Let user lassoo some points interactively.
uiwait(msgbox('Draw a region'));
hFH = drawfreehand() % Required Image Processing Toolbox
% Get x and y points of what user drew.
xfh = hFH.Position(:, 1)
yfh = hFH.Position(:, 2)
% Find points inside the shape.
itsInside = false(length(x), 1);
for k = 1 : length(x)
itsInside(k) = inpolygon(x(k), y(k), xfh, yfh);
end
% Extract the points that are inside to new variables. (Optional)
xInside = x(itsInside);
yInside = y(itsInside);
% Plot a red asterisk over the points
% that are inside the region they drew.
hold on;
plot(xInside, yInside, 'r*');
0000 Screenshot.png

Sign in to comment.


Walter Roberson
Walter Roberson on 5 Apr 2019

Categories

Find more on 3-D Scene Control 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!