Faster way to create Rectangles
15 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
vivek
el 13 de Oct. de 2014
Comentada: giannit
el 7 de Mayo de 2021
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 comentarios
Respuesta aceptada
Oleg Komarov
el 13 de Oct. de 2014
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
1 comentario
Más respuestas (1)
matt dash
el 13 de Oct. de 2014
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 comentarios
Ver también
Categorías
Más información sobre Polygons en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!