# How to plot a number of circles with the same radius, but the position of the circles is randomly put

23 ビュー (過去 30 日間)
Beibit Sautbek 2016 年 6 月 22 日
コメント済み: Image Analyst 2018 年 11 月 21 日
I need to plot a number of circles with the same radius. Number of circles and the radius are input parameters. Also circles are randomly positioned. For example: The program ask user to input the number of the circles, then ask to input the radius of the circle. Here, the radius is the same for all circles. Then by using input parameters program randomly put the circles.

#### 3 件のコメント

James Tursa 2016 年 6 月 22 日
What have you done so far? Do you know how to plot a single circle?
Roger Stafford 2016 年 6 月 23 日
May the circles overlap? Over what range are they randomly spaced?
Walter Roberson 2016 年 6 月 24 日
Circles may not overlap. It should separately located

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

### 採用された回答

KSSV 2016 年 6 月 23 日
N = 10 ; % number of circles
r = 0.25 ; % radius of circel
%
C = rand(N,2) ;
%
th = linspace(0,2*pi) ;
x = r*cos(th) ;
y = r*sin(th) ;
% Loop for each circle
for i = 1:N
xc = C(i,1)+x ;
yc = C(i,2)+y ;
hold on
plot(xc,yc) ;
end
axis equal

#### 1 件のコメント

Beibit Sautbek 2016 年 6 月 23 日
Dear Dr. Siva Srinivas Kolukula, The codes is great, thank you very much. However the circles are overlap each other, I need separately located circles. Maybe I need the certain distance between the circles Thank you very much

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

### その他の回答 (3 件)

Image Analyst 2016 年 7 月 16 日
I know you already figured out how to adapt Siva's solution to prevent overlap, because you accepted it, but in case anyone else wants to know how to make a set of non-overlapping circles, see the code below:
numCircles = 1;
numCirclesMax = 50;
maxIterations = 100 * numCirclesMax; % Fail Safe.
iteration = 1;
while numCircles < numCirclesMax && iteration < maxIterations
xTrial = rand;
yTrial = rand;
iteration = iteration + 1; % Fail safe.
% Only need to check for overlap for second and later circles.
if numCircles > 1
% Find distance from other, prior circles.
distances = sqrt((xTrial - x) .^ 2 + (yTrial - y) .^ 2);
if min(distances) < 2 * radius
% It's overlapping at least one of the prior ones
end
end
x(numCircles) = xTrial;
y(numCircles) = yTrial;
numCircles = numCircles + 1;
end
centers = [x', y'];
grid on;
axis equal
% Set up figure properties:
% Enlarge figure to full screen.
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0 0 1 1]);
% Get rid of tool bar and pulldown menus that are along top of figure.
% Give a name to the title bar.
set(gcf, 'Name', 'Demo by ImageAnalyst', 'NumberTitle', 'Off')

#### 1 件のコメント

Walter Roberson 2016 年 7 月 18 日
thank you very much.

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

Walter Roberson 2016 年 6 月 23 日
You might be able to use viscircles() if you have the Image Processing toolbox

#### 2 件のコメント

jahanzaib ahmad 2018 年 11 月 21 日
using the same code i m trying to generate circle of different radius . @is it possible ?
Image Analyst 2018 年 11 月 21 日
Well, almost the same. Of course you need to generate the random radii. See attached m-file that makes the figure below:

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

jahanzaib ahmad 2018 年 11 月 21 日
ONE LAST THING CAN U FIX THEM IN SEMI CIRCLE .. ?
axis([-1.1 1.1 -0.1 1.1]);

#### 1 件のコメント

Image Analyst 2018 年 11 月 21 日
What do you mean by "fix"

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

### Community Treasure Hunt

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

Start Hunting!

Translated by