Best way of drawing multiple circles and updating their position
13 ビュー (過去 30 日間)
古いコメントを表示
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) ...
(Ypositions - radius) radius*2 radius*2], ...
'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 件のコメント
採用された回答
Ameer Hamza
2018 年 5 月 12 日
編集済み: Ameer Hamza
2018 年 5 月 12 日
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) ...
(Ypositions - radius) radius*2 radius*2], ...
'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 件のコメント
Ameer Hamza
2018 年 5 月 12 日
編集済み: Ameer Hamza
2018 年 5 月 12 日
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.
その他の回答 (2 件)
Image Analyst
2018 年 5 月 12 日
The easiest way is to use viscircles() in the Image Processing Toolbox.
0 件のコメント
Walter Roberson
2018 年 5 月 12 日
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 件のコメント
参考
カテゴリ
Help Center および File Exchange で Surface and Mesh Plots についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!