use patch to plot hexahedron with 20 nodes
16 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
alize beemiel
le 13 Nov 2020
Commenté : alize beemiel
le 13 Nov 2020
hi
i have a hexaedron with 20 nodes
i have coordonates X Y Z
and the conectivity [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20];
and the stress value of all nodes TZ
TZ=[ -0.0225
-0.0226
-0.0233
-0.0185
-0.0188
-0.0144
-0.0144
-0.0141
-0.0062
-0.0064
0
0
0
-0.0209
-0.0216
-0.0126
-0.0123
0
0
-0.0137]
how can i use patch to plot my hexaedon and take all nodes to make interpolation for facecolor ith TZ
i use this
patch('Faces',Rectangles,'Vertices',[Vertice(:,1) Vertice(:,2) Vertice(:,3)],'FaceVertexCData',TZ,'FaceColor','interp','Marker','.');
vertice is X Y Z for the hexaedron
TZ is color face
but when i come to determine rectangle or the point to make faces i have problem
i wante to use all points of hexaedre
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/412748/image.png)
i do this but it deasnt work
Bricks =[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20];
Rectangles=[];
Rectangles=[Rectangles ; [Bricks(:,1) Bricks(:,2) Bricks(:,3) Bricks(:,4) Bricks(:,5) Bricks(:,6) Bricks(:,7) Bricks(:,8)]];
Rectangles=[Rectangles ; [Bricks(:,13) Bricks(:,14) Bricks(:,15) Bricks(:,16) Bricks(:,17) Bricks(:,18) Bricks(:,19) Bricks(:,20)]];
Rectangles=[Rectangles ; [Bricks(:,1) Bricks(:,2) Bricks(:,3) Bricks(:,10) Bricks(:,15) Bricks(:,14) Bricks(:,13) Bricks(:,9)]];
Rectangles=[Rectangles ; [Bricks(:,3) Bricks(:,4) Bricks(:,5) Bricks(:,11) Bricks(:,17) Bricks(:,16) Bricks(:,15) Bricks(:,10)]];
Rectangles=[Rectangles ; [Bricks(:,5) Bricks(:,6) Bricks(:,7) Bricks(:,12) Bricks(:,19) Bricks(:,18) Bricks(:,17) Bricks(:,11)]];
Rectangles=[Rectangles ; [Bricks(:,7) Bricks(:,8) Bricks(:,1) Bricks(:,9) Bricks(:,13) Bricks(:,20) Bricks(:,19) Bricks(:,12)]];
some one tell me use rectangle and take just the point of a corner but it give me a wrong resultat
thank you for any help
2 commentaires
Mario Malic
le 13 Nov 2020
Try to create patch for only one face, once you manage to do it, work your way towards patching all the faces.
Réponse acceptée
Bruno Luong
le 13 Nov 2020
Modifié(e) : Bruno Luong
le 13 Nov 2020
Here we go
[x,y,z]=ndgrid(0:2);
xyz = [x(:) y(:) z(:)];
xyz(sum(xyz==1,2)>1,:)=[];
x=xyz(:,1);y=xyz(:,2);z=xyz(:,3);
a=atan2(z-1.001,x-1);
[~,is]=sortrows([y -a]);
xyz=xyz(is,:);
F = zeros(6,8);
i = 0;
for c=1:3
for v=[0 2]
r = find(xyz(:,c)==v);
st = xyz(r,:);
st(:,c) = [];
st = (st-[1 1]);
a = sign(v-1)*atan2(st(:,2),st(:,1));
[~,is] = sort(a);
i = i+1;
F(i,:) = r(is);
end
end
xyz = xyz/2;
% Create a dummy Stress
%Stress = 2-sqrt(sum((xyz-rand(1,3)).^2,2));
TZ=[ -0.0225
-0.0226
-0.0233
-0.0185
-0.0188
-0.0144
-0.0144
-0.0141
-0.0062
-0.0064
0
0
0
-0.0209
-0.0216
-0.0126
-0.0123
0
0
-0.0137];
Stress = abs(TZ);
StressNorm = (Stress-min(Stress))/(max(Stress)-min(Stress));
close all
figure
clmap = jet;
StressColor = interp1(linspace(0,1,size(clmap,1)),clmap,StressNorm,'nearest','extrap');
patch('Faces',F,'Vertices',xyz,'FaceVertexCData',StressColor,'FaceColor','interp');
hold on
%scatter3(xyz(:,1),xyz(:,2),xyz(:,3));
set(gca,'Xtick',[],'Ytick',[],'Ztick',[])
for k=1:size(xyz,1)
text(xyz(k,1),xyz(k,2),xyz(k,3),num2str(k));
end
xlabel('x');
ylabel('y');
zlabel('z');
view(3)
axis('equal');
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/413048/image.png)
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Stress and Strain 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!