# Best way of drawing multiple circles and updating their position

7 visualizzazioni (ultimi 30 giorni)
Raldi il 12 Mag 2018
Risposto: Walter Roberson il 12 Mag 2018
What is the best way to draw a variable number of circles in a plot and update their position?
I have tried
F = rectangle('Position', [(Xpositions - radius) ...
'Curvature', [1, 1], 'LineStyle', '--', ...
'EdgeColor', 'r', 'LineWidth', 3);
but since I have multiple circles I would have to create a for loop to draw each circle.
F = viscircles([Xpositions, Ypositions], ...
radii, 'LineStyle', '--', 'EdgeColor', 'r', 'LineWidth', 3);
seems to work fine and draw the circles, but it does not provide of a way to update the positions of the circles.
##### 2 CommentiMostra NessunoNascondi Nessuno
KALYAN ACHARJYA il 12 Mag 2018
Are you looking for co-centric circles?
Raldi il 12 Mag 2018
No in fact they have different positions in the plot

Accedi per commentare.

### Risposta accettata

Ameer Hamza il 12 Mag 2018
Modificato: Ameer Hamza il 12 Mag 2018
The easiest is to use rectangle() and use handle F to update the Position property
F.Position = [x y r r]; % specify a new psition
F.Position = [x_ y_ r_ r_]; % specify a new psition
everytime you update Position property, the figure will be updated with the new position.
In older MATLAB version use
set(F, 'Position', [x y r r])
In case of for loop, create an array of handles,
% inside for loop
F(i) = rectangle('Position', [(Xpositions - radius) ...
'Curvature', [1, 1], 'LineStyle', '--', ...
'EdgeColor', 'r', 'LineWidth', 3);
and then set the property using F(1), F(2), ... instead of F to change a particular circle.
##### 3 CommentiMostra 1 commento meno recenteNascondi 1 commento meno recente
Raldi il 12 Mag 2018
So there is no way of skipping the for loop? I will keep doing some tests in case I figure something out and let you know, thanks.
Ameer Hamza il 12 Mag 2018
Modificato: Ameer Hamza il 12 Mag 2018
Yes, you will need to use for loops. rectangle is a separate graphics object and a call to rectangle() can only create one rectangle. So to draw multiple, a for loop is necessary.
An alternate will be arrayfun, but that is also a fancy way of writing for loop. And in this particular case will not result in any speedup because the actual time-consuming task in your case is the creation of graphics object itself.

Accedi per commentare.

### Più risposte (2)

Image Analyst il 12 Mag 2018
The easiest way is to use viscircles() in the Image Processing Toolbox.
##### 0 CommentiMostra -2 commenti meno recentiNascondi -2 commenti meno recenti

Accedi per commentare.

Walter Roberson il 12 Mag 2018
You need a loop or arrayfun() to create multiple rectangle. But once you have those, you can unpdate the positions more compactly.
v = [rectangle('Position', [1 2 1 1]); rectangle('Position', [4 3 2 2])]; %create vector of them somehow
newpos = num2cell(horzcat(v.Position)*2,2); %calculate new positions
[v.Position] = deal(newpos{:}); %and... action
##### 0 CommentiMostra -2 commenti meno recentiNascondi -2 commenti meno recenti

Accedi per commentare.

### Categorie

Scopri di più su Line Plots in Help Center e File Exchange

R2016b

### Community Treasure Hunt

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

Start Hunting!

Translated by