use patch to plot hexahedron with 20 nodes

7 vues (au cours des 30 derniers jours)
alize beemiel
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
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
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.
alize beemiel
alize beemiel le 13 Nov 2020
ok

Connectez-vous pour commenter.

Réponse acceptée

Bruno Luong
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');
  1 commentaire
alize beemiel
alize beemiel le 13 Nov 2020
oh
thank you
thank you so much

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

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

Start Hunting!

Translated by