How can I average the vectors within the grid cell?

16 Ansichten (letzte 30 Tage)
Ashfaq Ahmed
Ashfaq Ahmed am 7 Feb. 2022
Kommentiert: Turlough Hughes am 7 Feb. 2022
Hi altruists,
Suppose, I generated this simple vetor field using these few lines of codes:
[X,Y] = meshgrid(0:6,0:6);
U = 0.25*X;
V = 0.5*Y;
[Xq,Yq] = meshgrid(-6:0.25:6);
Uq = interp2(X,Y,U,Xq,Yq);
Vq = interp2(X,Y,V,Xq,Yq);
figure,
quiver(Xq,Yq,Uq,Vq,'autoscale','on');
grid on
title('Vector field','fontweight','bold', 'fontsize',20);
So, I get this grid -
Now - without considering 'all' these vectors, I simply want to take only one vector from each of the grid cell. The vector should be the average of all the vectors within that grid cell. The outcome should be like this -
So, the each of the grid cell is containing only one 'averaged' vector. In picture, it's shown in red (the value is exaggerated). Ciould you please give me an idea on how can I possibly do it?

Akzeptierte Antwort

Turlough Hughes
Turlough Hughes am 7 Feb. 2022
% code provided in the question
[X,Y] = meshgrid(0:6,0:6);
U = 0.25*X;
V = 0.5*Y;
[Xq,Yq] = meshgrid(0:0.25:6);
Uq = interp2(X,Y,U,Xq,Yq);
Vq = interp2(X,Y,V,Xq,Yq);
figure,
quiver(Xq,Yq,Uq,Vq,'autoscale','on');
grid on
title('Vector field','fontweight','bold', 'fontsize',20);
axis equal
You could block process the data taking the averages of each block as follows
m = 5; n = 5;
f = @(D,m,n) blockproc(D,[m n],@(block_struct) mean(block_struct.data,'all'));
Xd = f(Xq,m,n);
Yd = f(Yq,m,n);
Ud = f(Uq,m,n);
Vd = f(Vq,m,n);
hold on, quiver(Xd,Yd,Ud,Vd,'Color','red')
Is that what you meant?
  3 Kommentare
Ashfaq Ahmed
Ashfaq Ahmed am 7 Feb. 2022
(correction)
Oh, I understand why did it happen. It's because of the nature of the vector field itself. Because the field has more value the more it goes to the right/up. So, the average value's arrow shifts frm the center point.
Turlough Hughes
Turlough Hughes am 7 Feb. 2022
The red arrows start at the center of groups of 5 by 5 blue vectors from the original plot, and the undelying data defining the red vectors is in fact the average from those 5 by 5 vector groups. However, the plot is very misleading in that regard because the vectors were autoscaled by quiver(). Make sure to turn 'autoscale','off', if you want to compare the two plots.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Vector Fields finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by