![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/176089/image.png)
Faster way to create Rectangles
16 次查看(过去 30 天)
显示 更早的评论
I currently have a long 'for loop' over which I want to create rectangles. Is there a faster way i can do the below.The TPT on the below is not good.
for ii=1:10000
rectangle('Position',[xy(ii,1),xy(ii,2),xy(ii,3)-xy(ii,1),xy(ii,4)-xy(ii,2)],'EdgeColor','r');
end
I tried using patch function to create an object but it does not behave like the above loop.
patch('XData',[x; (x+w); (x+w); x],'YData',[y; y; (y+h); (y+h)],'FaceColor','white');
thanks
0 个评论
采纳的回答
Oleg Komarov
2014-10-13
To use patches you need first to organize the Xdata and Ydata in matrices of 4 rows, one per vertex, and as many columns as rectangles. You need to keep in mind that vertices follow the clockwise convention.
Consider the following simple example with two rectangles:
t = table([2 3; 2 3; 5 7;5 7],[1 10; 2 11; 2 11; 1 10], ones(4,2),...
'VariableNames',{'Xdata','Ydata','Zdata'},'RowNames',{'A','B','C','D'})
t =
Xdata Ydata Zdata
______ _______ ______
A 2 3 1 10 1 1
B 2 3 2 11 1 1
C 5 7 2 11 1 1
D 5 7 1 10 1 1
% Plot patch
patch(t.Xdata,t.Ydata,t.Zdata)
% (optional for clarity)
axis([0 10 0 15])
text(t.Xdata(:),t.Ydata(:),repmat(t.Properties.RowNames,2,1),'Color','red')
The result
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/176089/image.png)
更多回答(1 个)
matt dash
2014-10-13
The short answer is that yes you should use patch, and no you should not call patch in a loop. Instead make the data for all 10000 rectangles (in a loop if necessary) and then call patch once using the face/vertex structure format.
Slowness of graphics is much more strongly related to the number of objects than to the complexity of each one... so 10000 simple patches will be a nightmare but 1 patch with 10000 faces should be ok.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Polygons 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!