Generating empty interval of points

Dear All,
I want to generate points in the interval [20,80] and have the interval [40,60] as an empty area. I wrote this code but I don't now how to complete it. I'd appreciate any help.
LB=20;UB=80;
x = LB+(UB-LB)*rand(50,1);
y =LB+(UB-LB)*rand(50,1);
if x>40 | x<60| y>40 | y<60;
[x]==0;[y]==0;
plot(x,y, '.')
but it gives an error.
Regards

 Accepted Answer

This seems to work:
LB=20;UB=80;
x = LB+(UB-LB)*rand(50,1);
y = LB+(UB-LB)*rand(50,1);
idx = [((x > 40) & (x < 60)) | ((y > 40) & (y < 60))];
x(idx) = [];
y(idx) = [];
figure(1)
plot(x, y, '+')
grid
The ‘idx’ variable tests for the conditions and creates a logical vector then used to assign the elements of ‘x’ and ‘y’ to ‘empty’ rather than zero. The plot shows that there are no points in the area you want cleared.

5 Comments

Dear Star,
Thanks for you and for Roger for answer me, I realize that I didn't explain what I want exactly, forgave me both of you, with your code I got four areas of points separate of each other while I need a whole area of points and an empty area in the middle, is like an empty square inside a big square of points, so I tried to use
t = ((x<=40)||(x>=60)) && ((y<=40)||(y>=60));
but its wrong, could you please sorted to me.
Regards,
Imola.
@imola — Change only the ‘idx’ line in my code to:
idx = [((x > 40) & (x < 60)) & ((y > 40) & (y < 60))];
to get this plot:
That does give an empty square in the 40-60 range. It relies on tossing out points that initially landed in there, so that the final number of points is most likely less than 50. Do you need exactly 50 points in there, or is it okay to get however many you end up with?
Thanks Star, that's fine, it works perfectly .
Regards
My pleasure!

Sign in to comment.

More Answers (1)

Do this:
LB=20;UB=80;
x = LB+(UB-LB)*rand(50,1);
y = LB+(UB-LB)*rand(50,1);
t = ((x<=40)|(x>=60)) & ((y<=40)|(y>=60));
x = x(t);
y = y(t);
plot(x,y,'.')

1 Comment

Dear Roger, Thanks for you and for star for answer me, I realize that I didn't explain what I want exactly, forgave me both of you, with your code I got four areas of points separate of each other while I need a whole area of points and an empty area in the middle, is like an empty square inside a big square of points, so I tried to use
t = ((x<=40)||(x>=60)) && ((y<=40)||(y>=60));
but its wrong, could you please sorted to me.
Regards,
Imola.

Sign in to comment.

Categories

Find more on Interpolation in Help Center and File Exchange

Asked:

on 14 Jan 2015

Commented:

on 15 Jan 2015

Community Treasure Hunt

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

Start Hunting!