Visualize CFD data in a 2D mesh
10 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
António Rebelo
le 20 Oct 2023
Commenté : Fabio Freschi
le 23 Oct 2023
I have a N-by-M 2D mesh with already assigned values of the quantity for each one of the N*M cells (i = 1, 2, 3, ..., N*M).
I have the nodes coordinates but I can't find a way to "plot" each quantity as a color in the respective i cell.
I have tried to use 'pcolor' and 'surf' but the vectors x and y that define the mesh coordinates are always 1 unit too big...
Do you know how I could solve this problem?
Thank you!
3 commentaires
Walter Roberson
le 21 Oct 2023
image and imagesc() ignores the coordinate vectors, except for the first and last coordinate in the vector. You cannot use imagesc() for the case where the nodes are not equally spaced.
Also note that the coordinates you pass to image() or imagesc() are treated as the coordinates of the center of the pixel. If you want to use the coordinates as the coordinates of the edge then you need to make an adjustment to the coordinates
Réponse acceptée
Fabio Freschi
le 21 Oct 2023
I assume you have the connectivity of your cells, if not you can create it with delaunay. Then use the low level funciton patch. Note that patch works also with four-node elements.
% dummy data
x = linspace(-1,1,30);
y = linspace(0,3,100);
[X,Y] = meshgrid(x,y);
% points coordinates
P = [X(:) Y(:)];
% create triangulation
T = delaunay(P);
% scalar function
phi = P(:,1).^2+P(:,2).^2;
% plot
figure
patch('Faces',T,'Vertices',P,'FaceVertexCData',phi,...
'EdgeColor','none','FaceColor','interp');
6 commentaires
Fabio Freschi
le 23 Oct 2023
In theory, you can use triangles as weel, but it would be easier to have the connectivity of rectangles. In some way you should have the connectivity available, in any case you can create it on the fly
% dummy data
npx = 30;
npy = 100;
x = linspace(-1,1,npx);
y = linspace(0,3,npy);
[X,Y] = meshgrid(x,y);
% points coordinates
P = [X(:) Y(:)];
% create connectivity
nod = reshape(1:npx*npy,npy,npx).';
nElm = (npx-1)*(npy-1);
T = zeros(nElm,4);
T(:,1) = reshape(nod(1:npx-1,1:npy-1),nElm,1);
T(:,2) = reshape(nod(2:npx,1:npy-1),nElm,1);
T(:,3) = reshape(nod(2:npx,2:npy),nElm,1);
T(:,4) = reshape(nod(1:npx-1,2:npy),nElm,1);
% barycenters
B = (P(T(:,1),:)+P(T(:,2),:)+P(T(:,3),:)+P(T(:,4),:))/4;
% scalar function evaluated at barycenters
phi = B(:,1).^2+B(:,2).^2;
% plot
figure
patch('Faces',T,'Vertices',P,'FaceVertexCData',phi,...
'EdgeColor','k','FaceColor','flat');
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Surface and Mesh Plots dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!