Asked by Jide Williams
on 26 Oct 2018

I am new to MATLAB but I am trying to plot multiple circles on the same axis. I am using rand function to generate the centers because I want some of them to overlap, but it ends up plotting just one circle. Below is my code;

r = 0.005; x = rand(100,1); y = rand(100,1); th = 0:pi/100:2*pi; for i = 1:length(x) & 1:length(y) a = r*cos(th) + x(i); b = r*sin(th) + y(i); axis tight; hold on plot(a,b) end

Answer by Kevin Chng
on 26 Oct 2018

Edited by Kevin Chng
on 26 Oct 2018

Accepted Answer

r = 0.005;

x = rand(100,1);

y = rand(100,1);

th = 0:pi/100:2*pi;

for i = 1:1:length(x)

a = r*cos(th) + x(i);

b = r*sin(th) + y(i);

figure(1)

axis tight;

hold on

plot(a,b)

pause(0.1)

end

Slight change your code, it is very interesting, if you add pause(), then you see the animation. However, you delete the pause() if you don't want it.

Sign in to comment.

Answer by madhan ravi
on 26 Oct 2018

Edited by madhan ravi
on 26 Oct 2018

r = 0.005;

x = rand(100,1);

y = rand(100,1);

th = 0:pi/100:2*pi;

a=zeros(1,numel(x)) % preallocation for speed and efficiency

b= zeros(1,numel(y))

for i = 1:numel(x)

a(i) = r*cos(th(i)) + x(i);

b(i) = r*sin(th(i)) + y(i);

end

axis tight;

hold on

plot(a,b,'ob')

madhan ravi
on 26 Oct 2018

jonas
on 26 Oct 2018

Yep, you are entirely correct in that it's a poorly written question. One of the things you learn on this forum is filling in blanks and interpreting ambiguities, which is actually quite useful when teaching :)

With that said, the notations r and the values of th (0 to 2pi) and the fact that OP accepted @Keving Chng's answer would imply that OP intended the radius to go as input.

madhan ravi
on 26 Oct 2018

Wow thanks Jonas completely agree with you , one thing experience is gained day by day :)

Sign in to comment.

Answer by jonas
on 26 Oct 2018

If you have the image processing toolbox available, then there is a one-line solution to your problem.

viscircles([x,y],ones(size(x)).*r)

jonas
on 26 Oct 2018

r is a scalar, but the input to the function must be a vector of the same size as x and y. That's why you simply multiply it by a number of ones, like:

1 0.005

1 *. 0.005 = 0.005

1 0.005

... ...

jonas
on 26 Oct 2018

Jide Williams
on 26 Oct 2018

Thanks again

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.